模块功能单一性
不知道理解是否正确,仅作为记录,待实践确认。
- 书中把职责定义为“变化的原因”。即如果有多于一个动机去改变一个类,那么这个类就具有多于一个职责。于是我回想了下自己写的游戏,发现这么做几乎不可能。可能书是基于java语言编写的原因?
一个类只实现一个功能不行,那就改为一个方法/函数只实现一个功能。例如:AI分析,这个类需要实现初始化AI分析类的成员变量、根据获得的牌进行可用牌型归类、视情况分析指定牌型等。那么就将这些单一的功能分成不同的函数,其中部分比较大的功能再细分为比较小的函数去一一实现。而较大的功能函数,只负责调用它需要的单一功能函数。 - 分离耦合的职责:即有时候无法把两个或者多个职责拆分成单一模块,那么就分离他们的接口。即:将互相耦合的两个类中更主要的类抽象出一个接口类,而被抽象的类成为对应抽象类的实现。另一个类从依赖被抽象类改为了依赖抽象出来的接口类,从而解耦。
- 持久化:部分规则会需要频繁的变动,但是持久化的方式却并不会频繁变动。当偶然原因导致这两个功能集合在一起时就会增加维护的负担。而这一点并不用过于担心,因为进行单元测试的时候就能发现这个问题,及时使用FACADE或者PROXY模式对代码进行重构,将这两个职责给分离开。