面向对象
说明:是所有的事物都看成是一个对像,把一个对像看成一个整体,提倡封装继承,通过继承来实现多态的对像以及代码的重用
优点:
1结构更容易理解
2高度封装带来的好处就是可以提供, 方便、简单、针对性强的接口,上层使用起来更容易
缺点:使用继承,会使代码藕合度高,不够灵活,为了重用代码和实现多种不同的对像时,会形成很大的继承树,造成很多冗余的代码
面向组件
说明:是把对像拆分成功能独立的组件,通过不同的组合方式来实现多态的对像和代码的重用
优点:灵活度高,藕合度低
缺点:抽像化,不容易理解,难设计,类泛性,接口泛性,
下面在说下代码的脱藕
比如
A类为a类的管理器或控制器
B类为b类的管理器或控制器
b类会用到A类或a类的数据或方法,a类也会用到B类或b类的数据或方法
这时如果想脱藕有两个办法
1使用三层结构或MVC框架等,将A类和B类的数据都抽离出来,做成各自单独的数据层,a类和b类的方法在A类和B类里封装成对应的方法,这样实际上除了a类和b类完全脱藕,其它的并没有完全脱藕,但由于都只对外提供接口,已经大大的降低了藕度度
这时有个办法可以做成一个大的数据层,实际项目中会有很多个数据层,如果全合到一起就需要做管理,就出现了数据中心,这个以后在讲
2全部使用事件,不管是访问数据还是调用方法,全部使用发事件方式,这样的代码会完全脱藕,但由于事件承载的数据可能太过复杂,所以会使代码写起来会变得十分麻烦
最后总结,如果项目不大,就没必要一定使用三层结构或MVC框架等,或用事件来完全脱藕,这样反而会增加了复杂度和工作量。
但如果是大项目,即使不完全脱藕,也要尽量使用三层结构或MVC框架等的方式降低藕合度,不然项目后期容易造成改一处动全身的死结
实际上我们只要明白了藕合会出现的问题,和避免藕合的方法,并不一定必须使用某种特定方式来脱藕
其实最好是跟据项目情况,设计出既能有效避免模块之间藕合,又适合自己项目的程序架构