1.1 类的多职责设计
单一职责原则的英文为Single Responsibility Principle,简称SRP。它的定义是对于类只有且只有一个原因可以引起类的变化,即一个类只负责一个职责。当一个类承担多个职责时,那么任何一个职责的变化都会成为类改变的原因,多个不同的职责耦合到一起,当需求变化时,这样脆弱的设计会回带来很多负面的影响。以近期做的一个项目的用户管理为例,包括新增用户、删除用户、修改用户信息(密码、邮箱、手机号等)、新增角色、修改用户角色。类图如图1所示:
图1 用户信息类图
初步一看这个设计没毛病,把用户的属性和行为放在一个类中,但是按着单一职责原则,这样的设计犯了很严重的错误。
1.2 类的单一职责设计
设计的一个类只用于完成特定的业务,这个就是高内聚。耦合就是类之间的互相调用关系,如果耦合很强,互相牵扯调用很多,那么会牵一发而动全身,不利于维护和扩展。 根据单一职责原则,将属性和业务分离,设计出类图如图2。
图2 属性行为分离
1.3 总结
类的单一职责设计从原则上出发确实是一个优秀的思想,但在实际运用过程中可能困难重重,比如项目的时间安排、编码人员的水平、职责划分等,但尽管有困难,但我们在设计时最好做到职责单一,设计方面没有最好的只有更好的。