单一职责原则
面向对象设计原则简介:http://blog.youkuaiyun.com/memphychan/article/details/50321365
一个类(或者模块、方法)所承担的责任越多,其被复用的机会就越低。职责承担过多,这些职责就越容易耦合在一起,但一个职责改变的时候,往往会影响其他职责,造成脆弱的设计。
要在开发中实施单一职责原则,则必须要求我们理清职责的种类与归属,写出高聚合,低耦合的代码。其中一条技巧是,将不同的职责(即引起变化的原因)封装在不同的类中,如果多个职责总是同时发生改变,则可以将这些职责封装到同一个类中。
例子:
颜莞璐公司需要开发一个试卷自动生成系统(PaperGeneratingSystem),该系统从xml文件中读入试题,并存储到数据库中,用户可以根据需求动态生成试卷。
颜莞璐一开始的设计是这样的:
readXMLFile方法负责读入xml文件并保存在数据库中,genneratePaper方法负责根据需求从数据库中取出试题并自动生成试卷,getConnection方法负责连接数据库。
在本例中,PaperGeneratingSystem承担了太多的职责,既包括数据库相关的方法,又包括xml文件的读入、解析以及试卷的自动生成。readXMLFile既要读入xml文件,还需要将解析结果保存在数据库中。generatePaper既要负责从数据库取出试题,又要生成试卷。
上述设计导致的结果就是职责的耦合,大大降低了类(或方法)的可复用性。
改进:
改进之后,将数据库连接的职责封装在DBUtil中,将保存、取得试题的职责封装在QuestionDao中,将xml文件解析的职责封装在XMLReader中,PaperGeneratingSystem负责解析试题、生成试卷。上述几个类各施其职,大大降低了原本系统的职责耦合,并且高内聚、低耦合的DBUtil、QuestionDao、XMLReader可以轻易地被其他有需要的类复用。

本文介绍单一职责原则,强调一个类只负责一项职责的重要性。通过试卷自动生成系统的案例,展示如何通过解耦职责来提高代码的复用性和维护性。
1万+

被折叠的 条评论
为什么被折叠?



