Dependency injection 您最常用的松耦合模式是什么?

Dependency injection 您最常用的松耦合模式是什么?,dependency-injection,inversion-of-control,loose-coupling,Dependency Injection,Inversion Of Control,Loose Coupling,最近我看到很多关于如何构建松耦合应用程序的博客文章。在创建松散耦合的应用程序时,您最常用哪些模式?依赖注入?控制反转?是的,重要的是依赖注入和控制反转,但不要忘记抽象工厂和注册表。 旁白:阻止我编写耦合应用程序的不仅仅是模式: 命名。如果我不能很容易地为我的类想出一个名字,它要么什么都不做,要么做了太多的事情 可测试性。如果我不能很容易地模拟出我的类的依赖关系,那么它就是一个耦合设计 我最喜欢使用spring进行依赖注入。此外,对于maven来说,将所有实现隐藏在一个API模块后面是很常见的。

最近我看到很多关于如何构建松耦合应用程序的博客文章。在创建松散耦合的应用程序时,您最常用哪些模式?依赖注入?控制反转?

是的,重要的是依赖注入和控制反转,但不要忘记抽象工厂和注册表。

旁白:阻止我编写耦合应用程序的不仅仅是模式:

  • 命名。如果我不能很容易地为我的类想出一个名字,它要么什么都不做,要么做了太多的事情

  • 可测试性。如果我不能很容易地模拟出我的类的依赖关系,那么它就是一个耦合设计


    • 我最喜欢使用spring进行依赖注入。此外,对于maven来说,将所有实现隐藏在一个API模块后面是很常见的。因此,如果您的代码有三个模块,“应用程序核心”、“外部系统api”和“外部系统”,则可以使“应用程序核心”仅依赖于外部系统api。应用程序核心模块完全看不到实际实现及其所有依赖项。这实际上加强了更严格的关注点分离,并使松耦合更容易


      最妙的是加载这些maven设置的IDE强制执行这些可见性约束。因此,您将无法在应用程序核心中引用SQL、AXIS、JAXB或任何东西

      我发现自己经常使用这种模式。这是一种不断给出一个又一个项目的模式。

      我认为最基本的技术之一是“告诉-不要问原则,德米特定律”。也许它不像DI、UI或其他设计模式,但我认为遵循这一原则的对象是松散耦合的,并且能够很好地完成一件事


      “保持低调保持冷静告诉其他人”

      一些与SOA相关的模式(例如企业服务总线)提供了更高级别的抽象,并支持跨业务服务和技术服务分离关注点。然后(可以说)通过引入一个代理或总线来支持服务之间的松耦合,该代理或总线将解决方案中的服务解耦。

      依赖注入和IOC都非常适合解耦代码


      Dotnetrocks提供了非常好的定义。另外,请观看相关的DNR电视节目以获得更清晰的理解。

      桥接模式()

      效果非常好

      依赖注入是控制反转的一种形式

      Spring框架拥有大量Java程序员,而且它还有一个.NET实现。

      我很惊讶这一点还没有被提及——策略允许您避免创建对域模型中不同类型了解太多的类。每种策略都负责编码涉及特定类型的特定交互。这避免了创建一个主类型,该主类型知道许多其他类型以及每个类型的实现的细微差别

      来自维基百科:

      策略模式使用组合 而不是继承。在 定义了战略模式行为 作为单独的接口和特定的 实现这些功能的类 接口。特定类别 封装这些接口。这 允许更好地在 行为和使用 行为。这种行为是可以改变的 不破坏使用 它,并且类可以在 通过改变特定的 使用的实现不需要 任何重要的代码更改。 行为也可以随时改变 运行时以及设计时


      依赖项注入是我在我编写的几乎所有类中使用的模式——如果类有依赖项,我总是注入它(使用构造函数注入)。只有没有依赖项的类(即值对象)才不使用DI模式。能够测试使用DI的类是一个主要的好处

      关于DI的好处,这两个演示非常好:


      使用DI模式不需要DI容器,但是当程序变大(几十个类或许多作用域)时,DI容器可以减少很多样板文件。在JVM上,我的默认选择是。

      作为总体代码/架构风格的控制反转

      DI作为配置IoC的机制

      局部抽象(我称之为“理想环境开发”-就像您拥有您想要的确切环境一样编写)

      对象通常使用void方法进行通信,并传递数据,而不是使用getter/setter

      我从不在核心业务类中直接使用依赖关系——它总是抽象为本地抽象,显式桥接处理依赖关系


      我发现这种组合允许极为灵活的代码,并具有很强的组合感。

      仅澄清一个要点:在软件开发中,依赖项注入(DI)和控制反转(IoC)是相同的,并且通常是可互换的。@John:完全准确地说,依赖注入实际上是一种控制反转的方式。依赖注入是一种机制,IoC是一种编码方式。你可以在没有IoC的情况下使用DI。你可以在没有DI的情况下使用IoC(至少基于容器的DI),但这有点棘手。MVC+MVP是一个很好的组合,“VC”通常映射到MVP中视图和演示者的各个方面。对于GUI,MVC是一种逻辑分离,MVP是一种物理(类级)分离。