Dependency injection MVC:如果我不是通过依赖注入,而是通过从任何地方访问的单例来获得数据传输层,我的应用程序将受到怎样的影响?

Dependency injection MVC:如果我不是通过依赖注入,而是通过从任何地方访问的单例来获得数据传输层,我的应用程序将受到怎样的影响?,dependency-injection,Dependency Injection,初始问题: 我有一个在控制器中注入数据传输层的应用程序,并在那个里执行一些业务逻辑。我决定重构it—将所有业务逻辑从控制器移动到模型。我最终将数据转换为动作记录中的对象。 当前问题: 动作记录方法(如FindByKey()或IsExists())使用从控制器传递下来的数据传输层。数据传输层是同一个对象。所以我有很多方法,比如 ... User user = User.FindByKey(dataTransferLayer, key); ... if(User.ExistsWithKey(dat

初始问题:
我有一个在控制器中注入数据传输层的应用程序,并在那个里执行一些业务逻辑。我决定重构it—将所有业务逻辑从控制器移动到模型。我最终将数据转换为动作记录中的对象。

当前问题:
动作记录方法(如FindByKey()或IsExists())使用从控制器传递下来的数据传输层。数据传输层是同一个对象。所以我有很多方法,比如

...
User user = User.FindByKey(dataTransferLayer, key);
...
if(User.ExistsWithKey(dataTransferLayer, key))
...

您可以看到,它们都必须获得
dataTransferLayer
。所以,我决定不是通过依赖项注入,而是通过单例来获得它,应用程序中的每个类都可以访问它。所以问题是“如果我不是通过控制器中的依赖注入,而是通过从任何地方访问的singleton来获得数据传输层,我的应用程序将受到怎样的影响?”

不建议使用singleton(反模式),因为您可能无法编写单元测试用例。

dataTransferLayer是否只有业务逻辑,或者它也有状态。如果它没有状态,只有业务逻辑,则移动helper类中的所有逻辑,并通过helper类静态访问该逻辑,如果出于某种原因,它的状态很重要,那么请使用单例,但要确保线程安全,因为您的对象是可变的。线程安全可能是一个问题,一个线程对您的对象所做的更改会反映在其他线程中,从而可能会中断业务逻辑

这是一个很难回答的问题,因为它取决于应用程序的大小和生命周期。但是,重要的是要认识到,这样的设计违反了,并且活动记录模式被认为是无效的。