敏捷开发原则与实践(三)之 单一职责原则

单一职责原则(The Single-Responsibility Principle)是最简单也是最难掌握的一个原则。其中:单一职责=内聚,职责=变化的原因。不同的职责并非绝不能共处,关键是发现类中变化特征不同的职责,减少耦合。比如变化来源不同,一个职责经常变,另一个很少变,这时就要考虑将职责分开。

 

A class should have only reason to change.

 

注意这里将职责定义为“a reason for change”,也就是说进行职责分离时,如果从业务角度属于两个不同的职责,但变化时机是一样的,也就没有必要分开了,否则就是过度设计。

很多时候进行职责分离依赖于开发人员的设计经验,比如业务与存储通常就要分离。自己在开发过程中也要注意积累这方面的经验。

clip_image002

Separated Modem Interface

有时我们因为某些原因不得不将部分实现耦合在一起。比如上图中Modem类。但至少我们可以将对外接口进行分离,将有耦合的实现隐藏起来,不污染其他的代码。There are often reasons, having to do with the details of the hardware of OS, that force us to couple things that we’d rather not couple. However, by separating their interfaces we have decoupled the concepts as far as the rest of the application is concerned.

 

Android中数据业务重试机制实用RetryManager类单独管理就保持了DataConnection类职责的单一。重试机制发生变化,只需要修改RetryManager类即可。

 

最近自己开发的LocationManager类,其中的定时器设定就没必要单独分开了,因为目前还看不到它有单独变化的可能。

 

posted @ 2013-11-12 06:23  飞雪COCO  阅读(383)  评论(0编辑  收藏  举报