高内聚低耦合
这是自从大一学java以来一直遇见的专业‘术语’,但一直没有感觉到有什么重要性,可能是还没有进入工业界参加工业大生产的原因。但是近来越来越感觉到工业界的设计思想的核心就是两个字:解耦。
基本学过的框架和技术设计的目的都是为了解耦,比如jsp等struts等的标签技术将jsp页面的java代码解放出来,达到的解耦效果,虽然狭隘 的看,处理标签幕后的java代码要比直接书写java代码要多一些,但一旦把幕后代码设计成jar包来供别人使用则达到了一劳永逸的效果。
---------------------------------------------由此看出低耦合的效果之一是达到了代码的高度重用------------------------
单独达到了代码重用这一个目的就值得让人振奋!大量重复的劳动是让程序员称为码农 的根本原因。
当然struts将jsp中的java代码解耦分离成action控制器,不仅仅可以让大量action控制器去处理许多相同的请求已达到代码重用的目的,而且让本身各类代码混杂于一身的jsp稍稍整洁了一点,对于jsp页面一眼看过去真的是杂乱:各种标签,各种java代码,还可以混杂js等脚本,很不利于维护,风格就是一个字:乱
----------------------------------------------由此看出低耦合的效果之二是达到了分层管理减少代码污染--------------
既然struts把jsp的controler和view给分离了,就达到了分层管理的好处,好,那么就继续分吧,于是struts的控制器坚决不再涉及业务逻辑代码和持久化代码,他自己也就只负责接受客户端请求和响应结果,处理请求的任务就交给了service服务层,当然service层又处理业务有要和数据库打交道便又显得有些乱了,于是又分离出持久层dao,就是传说中的mvc的model层咯,这时显然层次多了很清晰,但各个层的交互如何处理?层次之间又涉及到了敏感话题:耦合度。为了把各个层的耦合度降到最低,spring应用而生咯,spring的出现使得使得各个层次间的耦合降到最低,也就是只在接口处耦合,也就是说spring带来了一种编程风格:面向接口编程。有了接口,spring这个优秀的单例工厂就可以负责把各个层次的组件给造出来,然后让各个层次只在接口处耦合
可以说面向接口编程使耦合降到最低,但这样能达到什么效果呢?
举一个实例来说明:大一刚自学完java时就跃跃欲试,写一些坦克大战,安卓贪吃蛇什么的一些小游戏,感觉很有成就感,但在设计时常常遇到这样的情况:A类想访问B类的资源,于是在A类中new一个B类,然后,B类又想访问A类的资源,于是在B类中再new一个A类。然后问题就来了,在new A类的时候要先new一个B类填进去,但在new B类的时候又需要用到A类,这就遇到著名的现有蛋还是先有鸡的问题,而且这new是很可怕的,试想虚拟机中new了很多A类的实例和很多B类的实例,性能可能会明显下降。当时肯定不会顾及性能问题,能运行就ok了,再说也感觉不到,因为现在的内存和cup都是能牛逼的了。当时的处理就是简单的做个工具类,把一些相互访问的资源放到工具类里做成静态的属性和方法,当时感觉到工具类是如此的牛逼啊,现在看来这不就是解耦么,把耦合在一起的资源给分离出来。
----------------------------------------------------由此看来低耦合的效果之三是避免循环依赖-----------------------------