我知道还有类似的问题Here但我认为我的这个扩展了一点。在应用程序扩展性的预期中使用IoC容器
我最近一直在研究已经生产了大约一年的应用程序,没有问题,也没有真正的扩展计划。该应用程序具有很少依赖性,并使用DI但没有容器。
现在我正在将应用程序扩展到公司指令的更广泛的范围,这使我实现了使用IoC容器。这里的问题是将一个容器添加到我之前认为不需要的代码的开销。
我作为我前进的具体问题是:
在规划和编码想必不会扩大小很多的应用程序,我应该实现的容器在期待那个场景,如这些可能存在自己和这样的期待,我会更好地从一开始就实施一个容器,因此在扩展时已经存在框架。
如果在将应用程序扩展到超出其初始意图时执行容器变得繁琐,那么这是设计不佳的标志吗?
编辑:
我使用固体原则(尽我的能力),并在我的应用广泛的接口目前的问题是,更关系到在使用IoC容器,而不是DI的和它本身。前面提到的应用程序是一种自带的DI样式,我正在添加一个容器,问题出现在这个容器中。
我知道YAGNI会上来,这正是我引起这个问题的原因。我同意成本绝对是一个因素,但正如在其他答案中所述,将容器添加到小应用程序的开销很小,我同意,因为我以前做过这件事,而且它很简单。在你看来,你会如何定义YAGNI的“需求”?没有任何代码需要*容器,但它肯定可以提高可管理性。否则,我完全同意你的第三段。如果实施成本高昂,您可以让您的经理们思考如此长的时间。 –
就Yagni而言,如果我的项目没有从某些方面获得直接利益,那就不需要了。例如,DI使我的项目单元测试更容易。所以我需要它。容器不会授予任何额外的好处,因为除了生产使用和硬编码单元测试之外,我不需要切换实现。因此不需要添加容器。其他人可能有不同的要求,所以他们会针对各自的项目得出不同的结论。 – nvoigt
DI不仅有助于单元测试。它还有助于松散耦合和关注点分离。从用户的角度来看,这不是直接的要求,但它们很重要。无论你需要一个容器是另一个问题,但我通常更喜欢经过测试和维护的解决方案,而不是你自己的。 – Kenneth