技术开发 频道

如何用C#实现依赖注入?



    三.内家黑箱之道:低耦合、高聚合

    如果将设计好的对象之间用有向箭头连在一起,很多时候会变成了一张网,如果将对象的方法之间用有向箭头连在一起,则看起来像信手涂鸦。对于设计人员,能够将其中的关系一一说明清楚也是一个困难的事情,而对于的开发人员,则变成了黑洞。当用户需求发生变化时,这样的设计会成为噩梦,当然这是比较极端的情况。但是也能说明,在设计各个层面减少耦合是关键。

    一般来说,大部份的软件内部都是包含多个模块的,各个模块之间或多或少的存在一些耦合。这些功能的耦合,最理想的一种状态,就是可配置,可装卸。任何一个模块的去除,不至于影响到其他功能。并且,更多的功能是采用配置的。就是说,各个模块,就像搭积木一样,可以把其中的一块替换掉,或者拿掉,但不可以影响其他的功能。可配置,可装卸的软件,必将是未来软件更为理想的开发模式。这对于系统的维护,以及需求的变更适应性都是非常好的。

    因此“内家黑箱”设计之道是:低耦合、高聚合。各种软件设计的原则,如依赖倒置原则、单一职则原则、面向接口等,以及各种设计模式,其根本的目的其实只是为了降低耦合。因为只有低耦合才能更好的适应变化,更好的复用和扩展。

    一般来说,我们常用的实现方法是:运用设计模式封装变化、降低耦合。设计模式是用来“封装变化、降低耦合”的工具。它是面向对象设计的产物,其本质就是充分运用面向对象的三个特性,即:封装、继承和多态,进行灵活的组合运用。

    当然,耦合无论如何也是不可避免的。当我们实现接口、继承父类的时候,就会不可避免的产生耦合。但耦合是有不同粒度的,我们必须非常清楚的是解耦需要到什么粒度为止。一般来说应以模块的复用粒度为准,尽量解除复用模块或对象之间的耦合。而复用模块之内的耦合,应属于聚合的范畴,所以不要盲目的去解耦,否则就陷入了误区。

    在这里,我们再回达头来看看怎样才能解耦。一般有以下两个思路:(1)将具体的东西抽象处理。(2)将分散的东西集中处理。降低耦合,也就是解耦是关键。当我们实现了低耦合,高内聚,也同时达到了软件设计的另一个目标高扩展,高复用。
0
相关文章