我们如何确定何时使用依赖注入或单例模式。
我在很多网站上读过,他们说“使用依赖注入而不是单例模式”。但我不确定我是否完全同意他们的观点。对于我的中小型项目,我肯定会直接使用单例模式。
例如记录器。我可以用Logger.GetInstance().Log(...)
但是,为什么我需要用记录器的实例注入我创建的每个类,而不是这个?
单例就像共产主义:它们在纸面上听起来都很棒,但在实践中却会出现问题。
单例模式过分强调访问对象的便捷性。它完全避开了上下文,要求每个使用者都使用 AppDomain 范围内的对象,不为不同的实现留下任何选项。它将基础设施知识嵌入到您的课程中(调用GetInstance()
)同时精确添加zero表达力。它实际上削弱了你的表达能力,因为你不能改变一个类使用的实现而不改变它all其中。您根本无法添加一次性的功能。
还有上课的时候Foo
依赖于取决于Logger.GetInstance()
, Foo
有效地向消费者隐藏其依赖性。这意味着你不能完全理解Foo
或者放心地使用它,除非您阅读了它的来源并发现它取决于的事实Logger
。如果您没有源代码,就会限制您理解和有效使用您所依赖的代码的程度。
使用静态属性/方法实现的单例模式只不过是围绕实现基础设施的一种 hack。它以多种方式限制您,同时与其他选择相比没有提供明显的好处。您可以随心所欲地使用它,但由于有可行的替代方案可以促进更好的设计,因此永远不应该推荐它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)