gpt4 book ai didi

dependency-injection - DI : Composition root decomposition

转载 作者:行者123 更新时间:2023-12-04 08:22:50 25 4
gpt4 key购买 nike

Composition root看起来很奇怪的图案。我们有一个非常大的上帝对象,它对任何事情都了如指掌。

将组合根拆分为某些模块的正确方法是什么,这些模块将封装对象图自身部分的初始化?

怎么样hierarchical dependency injection ?

最佳答案

我不同意合成根是 God Object 的前提。 .虽然从概念上讲,组合根可能包含许多代码行,但它只有 single responsibility :组成一个对象图。

组合根可以包含很多数据,并且它本身与整个应用程序耦合,但它在概念上只有一种方法。它只有一个改变的理由,那就是如果你想改变你的应用程序的组成方式。

此外,当组合根耦合到应用程序的其余部分时,应用程序代码对组合根一无所知。因此,根据Dependency Inversion Principle,耦合只在一个方向上进行。 .

一种说法是上帝对象违反了所有五个 SOLID principles ,而组合根至少遵循 SRP、ISP 和 DIP。我不认为 OCPLSP在这里申请。

尽管如此,如果一个组合根组成一个大应用程序,它仍然可以包含很多代码。如果您发现它变得难以管理,那么您应该如何将其分解为更小的代码块?

与分解任何其他代码的方式相同。视情况而定™。

我希望我从来没有写过或说过一个 Composition Root 只能是一个类。如果我这样做了,我想收回它。在编写 Composition Roots 时,我经常将其职责划分为多个类(尽管很少超过少数)。您可以应用任何您想要的设计模式或其他 OOD 技术来实现该目标。组合根然后变为 Facade在你的实现。

我不能提供更多的指导,因为它取决于应用程序架构。如果您进行垂直切片,您很可能需要以不同于进行水平分层的方式来构建合成根,依此类推。

也就是说,作为一般规则,我认为尝试将依赖关系图分解为子树没有用处。首先是因为依赖图是一个图,而不是树,还因为你经常需要交错多个独立的关注点。例如,您可以拥有负责应用程序的各个子部分的子图,但是您需要在整个过程中交错相同的日志记录机制、相同的缓存机制或相同的安全机制等整个图形。如果你试图将它们分开,你就不能轻易做到这一点。

关于dependency-injection - DI : Composition root decomposition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45660137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com