SOLID、KISS、YAGNI、DRY、LOD 等。

如何判断某个类的职责是否单一??

A class or module should have a single responsibility

单一职责原则是为了实现代码高内聚、低耦合,提高代码的复用性、可读性、可维护性。

不要设计大而全的类,要设计粒度小、功能单一的类。具体要看需求和应用场景。比如一个UserInfo类可能有姓名,年龄,国家,城市,县区等信息。如果信息只用来展示,那么这么划分就好。如果地址相关信息有单独的其他用途,则最好将地址相关信息再单独抽出来。

我们可以先写一个粗粒度的类,满足业务需求。随着业务的发展,如果粗粒度的类越来越庞大,代码越来越多,这个时候,我们就可以将这个粗粒度的类,拆分成几个更细粒度的类。这就是所谓的持续重构。

需要对职责进行拆分的场景:
1. 类中的代码行数、函数或者属性过多;
2. 类依赖的其他类过多,或者依赖类的其他类过多;
3. 私有方法过多;
4. 比较难给类起一个合适的名字;
5. 类中大量的方法都是集中操作类中的某几个属性。

但是注意如果拆分得过细,实际上会适得其反,反倒会降低内聚性,也会影响代码的可维护性。