我应该在不能使用 class 的控制器中使用 Lazy<T> 吗?
Should I use Lazy<T> in a controller where a class may not be used?
我正在编写一个 MVC 5 互联网应用程序并且有一个关于使用延迟和延迟初始化的问题。
Lazy Class 文档说:
Use lazy initialization to defer the creation of a large or
resource-intensive object, or the execution of a resource-intensive
task, particularly when such creation or execution might not occur
during the lifetime of the program.
这是我的情况:
我有一个具有验证服务的控制器 class。此服务 class 仅在控制器创建或编辑功能中创建或编辑模型对象时使用。
我是否应该使用 Lazy 进行此验证 class?我在想也许吧,因为用户可以浏览到索引、详细信息和删除功能,并且永远不会使用验证服务 class。验证 class 有超过 900 行代码。
此外,我有一个异常服务 class,用于在发生错误时显示自定义错误页面。这个异常class有100行代码,只在异常发生时使用。如果没有发生异常,则不会使用此class。我应该为此异常使用 Lazy class 吗?
我没有用过Lazy,求教一下,不知道以上两种情况到底该不该用Lazy
提前致谢。
编辑
有人可以解释一下在上述情况下是否有任何理由不使用 Lazy 吗?异常缓存是我需要担心的事情吗?
验证服务 class 有一个接受 IGenericMultipleRepository
对象的构造函数。这个对象是一个用于访问存储库的接口,我在单元测试时使用它。异常服务 class 具有默认构造函数。
我肯定会为验证服务使用惰性初始化。对于异常处理程序,您可以采用任何一种方式 - 预期会出现异常。惰性初始化的好处是您的代码响应更快并且使用更少的资源。缺点是要学一个新的class。一旦你学会了它,你可以在很多地方使用它。
代码行数确实与实例化 class 的 运行 时间成本关系不大。如果没有静力学并且你有一个空的构造函数,那么实例化你的验证或异常会很便宜 classes.
一个更重要的问题是,通过使用 Lazy 或直接实例化它们,您会将控制器 class 与这些服务 class 紧密耦合,这将使单独测试它们变得更加困难。
在没有看到代码的情况下很难准确地说出来,但我怀疑你最好使用依赖注入将每个 class 注入到控制器中(并且每个都有一个接口)。
通过这种方法,您可以独立测试每个 class,您可以用模拟代替验证和异常 classes,并且您可以在下次有这些 classes 时重用这些 classes需要一个控制器。
如果 class 的实例化成本很高,您仍然可以使用依赖注入容器,但您可以使用 Func<T>
依赖。例如参见 [=11=].
我还应该补充一点,class实例化成本高昂的 es 本身通常是一个坏主意:构造函数不应该做重要的工作。
我正在编写一个 MVC 5 互联网应用程序并且有一个关于使用延迟和延迟初始化的问题。
Lazy Class 文档说:
Use lazy initialization to defer the creation of a large or resource-intensive object, or the execution of a resource-intensive task, particularly when such creation or execution might not occur during the lifetime of the program.
这是我的情况:
我有一个具有验证服务的控制器 class。此服务 class 仅在控制器创建或编辑功能中创建或编辑模型对象时使用。
我是否应该使用 Lazy 进行此验证 class?我在想也许吧,因为用户可以浏览到索引、详细信息和删除功能,并且永远不会使用验证服务 class。验证 class 有超过 900 行代码。
此外,我有一个异常服务 class,用于在发生错误时显示自定义错误页面。这个异常class有100行代码,只在异常发生时使用。如果没有发生异常,则不会使用此class。我应该为此异常使用 Lazy class 吗?
我没有用过Lazy,求教一下,不知道以上两种情况到底该不该用Lazy
提前致谢。
编辑
有人可以解释一下在上述情况下是否有任何理由不使用 Lazy 吗?异常缓存是我需要担心的事情吗?
验证服务 class 有一个接受 IGenericMultipleRepository
对象的构造函数。这个对象是一个用于访问存储库的接口,我在单元测试时使用它。异常服务 class 具有默认构造函数。
我肯定会为验证服务使用惰性初始化。对于异常处理程序,您可以采用任何一种方式 - 预期会出现异常。惰性初始化的好处是您的代码响应更快并且使用更少的资源。缺点是要学一个新的class。一旦你学会了它,你可以在很多地方使用它。
代码行数确实与实例化 class 的 运行 时间成本关系不大。如果没有静力学并且你有一个空的构造函数,那么实例化你的验证或异常会很便宜 classes.
一个更重要的问题是,通过使用 Lazy 或直接实例化它们,您会将控制器 class 与这些服务 class 紧密耦合,这将使单独测试它们变得更加困难。
在没有看到代码的情况下很难准确地说出来,但我怀疑你最好使用依赖注入将每个 class 注入到控制器中(并且每个都有一个接口)。
通过这种方法,您可以独立测试每个 class,您可以用模拟代替验证和异常 classes,并且您可以在下次有这些 classes 时重用这些 classes需要一个控制器。
如果 class 的实例化成本很高,您仍然可以使用依赖注入容器,但您可以使用 Func<T>
依赖。例如参见 [=11=].
我还应该补充一点,class实例化成本高昂的 es 本身通常是一个坏主意:构造函数不应该做重要的工作。