做程序时间长了,逐渐知道了,原来对付一个项目架构的根本办法就是松耦合,其他的其实都是这个理论的细化和补充!
面向接口编程,声明性设计.说通俗点,对于两个模块A和B,就是使得A对B的依赖,转变为A对B的接口或者说B核心抽象的依赖.由于接口是对B的功能的抽象,是B应该提供的基本的功能的描述,或者说是B能提供的功能的声明性描述.这样,即使B的实现真的变化了,而B对外提供的接口不变,则A也不会收到影响.这就是松耦合吧.
松耦合,从另一个侧面是高内聚.如果在一个模块内的东西能做到高内聚,即把内聚性高的东西放到一个模块中,则模块间就不会有太多的关系,其相互的依赖就会降低,则模块之间也就是松耦合.如果一个模块中的东西内聚性不高,首先是把不相关的东西搞的一起容易引起混乱,不容易理解,不容易维护.其次是许多不相关的东西,更容易引起变化.
如果要做到松耦合,应该使得一个模块或对象提供的功能是抽象的,本质的东西,这些东西不容易发生变化,对这些功能是描述性的,不涉及到具体的.因为具体的东西往往是容易变化的.由于核心的抽象是不容易变化的,其提供的功能是描述性的.则对这些描述性的关联或者依赖,不容易导致另一个模块的改变,使得模块间是松耦合的.
松耦合的东西是容易维护的,因为一个模块或者对象的一些变化,很多时候不容易引起另一个的变化,或者是引起的变化比较少.松耦合的东西也是容易适应变化的.很多时候,改变的往往是具体的实现,这常常是由于开始需求理解的原因,或者是有更好的实现方法.如果是这种情况,则该模块提供的核心功能往往是不变的或者变动很小.则对其有松的依赖关系的模块或者对象就不会发生改动或者很小的改动.这适应了由于反馈带来的变化.
松耦合不是没有关系!这是自己学习时的十分错误的一个想法.在自己开始做程序思考其结构时,常常思考想使得各个模块或者对象间关系很少,最好时没有关系.在一个项目中,与别的项目模块没有任何关系的模块是不可能的,否则也就不是一个项目了!
今天太晚了,脑子也有点晕了,思维也短路了.睡觉了.过两天把例子补上!