php - 软件架构: Service Dependency - Inject Container or concret class

标签 php symfony design-patterns dependency-injection software-design

假设有以下服务类:

class A {}

class B {}

class C {}

现在,A 类 获得对B 类 的依赖。所以我只是注入(inject)B类。 后来在开发中,我的 A 类 也需要 C 类。 (这可能会一直持续下去......)

注入(inject)依赖容器以便能够根据需要使用所有服务是否更好?或者通过仅注入(inject)我需要的那些类来保持服务类较小?

这里的最佳实践是什么,为什么?

目前我倾向于注入(inject)我需要的每个依赖服务,主要是为了在一个地方查看依赖关系( header 中的 DI 注释)。

Please don't close as "opinion based" this questions is for best Practice, this have to be a opinion, but when a majority of users have the same opinion then its a best practice.

最佳答案

我建议不要注入(inject)整个服务容器。如果这样做,类依赖关系会变得模糊(例如,您必须遍历整个类代码才能查看该类需要哪些依赖关系),并且可能会导致困惑。

直接注入(inject)您需要的这些依赖项。如果您注意到您的类中有很多依赖项,那么应该提醒您,该类做了太多事情(或有太多职责),您应该将其拆分(或单独的职责)。

关于php - 软件架构: Service Dependency - Inject Container or concret class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21782087/

相关文章:

javascript - 通过带有索引的 jquery ajax 发送 php 数组并接收数组值

symfony - 如何使用 docker 将 Symfony4 连接到 mysql

php - PostgreSQL 参数绑定(bind)与 JSONB 运算符冲突

javascript - 使用 Redux 展开/折叠侧边栏

php - Laravel 5 找不到自定义命名空间的类

php - 在 ZF2 中使用表单注释和 DoctrineORM 在 composedObject 中呈现值

php - 如何在表中搜索与记录匹配的特定关键字?

symfony - 如何将变量从 Twig 路径传递到同一个 Controller ?

java - java 中的多线程和异常处理的责任链

python - 在哪里存储现场数据以及如何提供对其的访问?