Dependency injection 直接注入对象依赖项,或者直接注入方法

Dependency injection 直接注入对象依赖项,或者直接注入方法,dependency-injection,Dependency Injection,我在一些地方读到的DI中的一个最佳实践不是为了得到对象C而注入对象B,而是注入C 但是,如果只需要一个来自C的方法,那么您是否只需要注入该方法而不是C 如果是的话,那么如果需要一些C语言的方法呢?有没有一点是,传递完整的对象并接受这样一个事实更方便,即你得到的是你不感兴趣的东西 或者,这一点是否表明C类可能有太多不同的职责,需要提取到多个较小的类中,然后可以在没有太多负担的情况下注入这些类的对象 不要害怕说出显而易见的事实,这对我来说都是新鲜事。如果依赖项有(许多)比你关心的更多的方法,这是一个

我在一些地方读到的DI中的一个最佳实践不是为了得到对象C而注入对象B,而是注入C

但是,如果只需要一个来自C的方法,那么您是否只需要注入该方法而不是C

如果是的话,那么如果需要一些C语言的方法呢?有没有一点是,传递完整的对象并接受这样一个事实更方便,即你得到的是你不感兴趣的东西

或者,这一点是否表明C类可能有太多不同的职责,需要提取到多个较小的类中,然后可以在没有太多负担的情况下注入这些类的对象

不要害怕说出显而易见的事实,这对我来说都是新鲜事。

如果依赖项有(许多)比你关心的更多的方法,这是一个很好的迹象,表明它是一个违反规则的方法

如果你能控制这个界面,我建议你把它分成几个更小的部分。您仍然可以有一个具体的类实现多个角色接口,如果这对您的特定实现更有意义的话


如果您不控制依赖项的设计,我倾向于注入整个接口,因为它仍然代表一个内聚的行为集合(即使我们不同意原始设计者的设计选择)。以后您可能需要更多这种行为。

如果许多类不需要大部分对象C,那么对象C需要重构。顺便说一句,最好是通过对象C的接口(或抽象超类)进行注入。在面向对象语言中,您几乎从不传入方法:传入对象。您的目标是哪种语言和平台?PHP5.3。我第一次看到这个方法是通过Java中的手动DI方法实现的,我也看到了这个想法,但感觉我的对象正在溶解。简短回答:是的,重构到更小的类我会阅读这些引用,也许还会读一些关于OOAD的书。干杯我现在给你打勾:)