Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以在业务逻辑中使用静态类吗?_C#_Asp.net Mvc_Design Patterns_Architecture_Static - Fatal编程技术网

C# 我可以在业务逻辑中使用静态类吗?

C# 我可以在业务逻辑中使用静态类吗?,c#,asp.net-mvc,design-patterns,architecture,static,C#,Asp.net Mvc,Design Patterns,Architecture,Static,这可能是一个重复的问题,但让我们谈谈无状态应用程序,如WebAPI、ASP.NET、WCF。所有这些都是无状态应用程序。那么,我可以使用业务逻辑中的静态类吗。因为静态应用程序将工作得更快 在我们的ASP.NET MVC应用程序中,我们有单独的业务逻辑项目(库)。因为我们使用的是静态类。这是使用静态类的好方法吗?使用静态类有一个很大的缺点:它们很难模拟单元测试(甚至单元测试也很难,这取决于所使用的框架)。即使是静态方法也很难模仿。静态类没有真正的优势,所以答案是:不要将静态类用于业务逻辑。不要对业

这可能是一个重复的问题,但让我们谈谈无状态应用程序,如WebAPI、ASP.NET、WCF。所有这些都是无状态应用程序。那么,我可以使用业务逻辑中的静态类吗。因为静态应用程序将工作得更快


在我们的ASP.NET MVC应用程序中,我们有单独的业务逻辑项目(库)。因为我们使用的是静态类。这是使用静态类的好方法吗?

使用静态类有一个很大的缺点:它们很难模拟单元测试(甚至单元测试也很难,这取决于所使用的框架)。即使是静态方法也很难模仿。静态类没有真正的优势,所以答案是:不要将静态类用于业务逻辑。不要对业务方法使用静态方法。

否,
因为当您使用静态类时,这意味着您不想创建该类的实例,并且它在业务逻辑上是一个非常落后的情况。

它不好,原因有几个:

  • 静态类不能被实例化并保存未共享的状态,因此您基本上扼杀了OOD原则
  • 因为static不能保存状态和实例化,所以通常方法的签名会更复杂,代码也会更混乱
  • 当存在大量静态代码并进行代码复制时,更容易出错
  • 当您经常编写静态代码时,很难保持项目边界正确
    简言之,尽量避免使用静态代码,除非它像扩展方法一样喊“静态”之类的。干净的代码和坚实的原则可以让你更深刻地理解为什么要避免它。

    “因为静态应用程序会工作得更快”谁告诉你的?代码不是因为它是静态的而更难理解。事实上,它可能会更快,因为它是一次性初始化的,而不是缓存的,但这也适用于非静态类。更快的不是静态类,而是静态方法比实例方法更快。。。但差别如此之小,可以忽略不计。(静态方法更快,因为它们没有包含
    this
    reference的“hidden”参数……少一个参数->调用更快)。静态类纯粹是C#(它们在IL中间语言中不存在)@xanatos的同步糖,这就是为什么我为了避免重构而不提这一点,因为重构没有带来可测量的改进。谢谢你的清晰解释。但你的观点是什么。按需创建的对象(堆内存),这意味着运行时。因此,在web应用程序设计方面,静态行为更快。第一次加载应用程序时加载的所有类和创建的内存都将被重用,只要应用程序运行i am同意;)