解释:对于一个类而言,应该只有一个发生变化的原因。(单一职责不仅仅是指类)
代码足够简单,塞在一起没有影响。
单一职责原则的优点就是高内聚,使得模块看起来有目的性,结构简单,修改当前模块对于其他模块的影响很低。缺点就是如果过度的单一,过度的细分,就会产生出很多模块,无形之中增加了系统的复杂程度。
方法:方法多个分支,还可能扩展变化,最后拆分成多个方法
类:接受输入-数据验证-逻辑计算-数据库操作-日志
接口:也会把不同的功能接口,独立开来。
如:public class List<T> : ICollection<T>, IEnumerable<T>, IEnumerable, IList<T>, IReadOnlyCollection<T>, IReadOnlyList<T>, ICollection, IList
类库:把项目拆分成多个类库,重用-方便维护
项目:客户端-管理后台
1.在不使用单一原则,这样每次添加一个动物时会修改源代码
1 public class Animal 2 { 3 public string _Name; 4 public Animal(string name) 5 { 6 this._Name = name; 7 } 8 9 public void Breath() 10 { 11 if (_Name == "鱼") 12 { 13 Console.WriteLine("呼吸水"); 14 } 15 else if (_Name == "鸟") 16 { 17 Console.WriteLine("呼吸空气"); 18 } 19 } 20 }
2.使用单一原则,每个类拆分,这样扩展另外一种动物,只需要扩展新增一个类就行。
1 public abstract class AbsAnimal 2 { 3 public string _Name; 4 public AbsAnimal(string name) 5 { 6 this._Name = name; 7 } 8 9 public abstract void Breath(); 10 } 11 12 13 public class FishAnimal : AbsAnimal 14 { 15 public FishAnimal(string name) :base(name) 16 {} 17 public override void Breath() 18 { 19 Console.WriteLine("呼吸空气"); 20 } 21 }
public class Animal { public string _Name; public Animal(string name) { this._Name = name; }
public void Breath() { if (_Name == "鱼") { Console.WriteLine("呼吸水"); } else if (_Name == "鸟") { Console.WriteLine("呼吸空气"); } } }