首先,SOLID是以下五个原则的缩写:
- Single Responsibility Principle (SRP),单一职责原则;
- Open-Closed Principle (OCP),开闭原则;
- Liskov Substitution Principle (LSP),里氏替换原则;
- Interface Segregation Principle (ISP),接口隔离原则;
- Dependency Inversion Principle (DIP),依赖倒置原则;
这些原则是罗伯特·c·马丁(Robert C. Martin)在21世纪初提出的,事实上,它们只是Martin的书和博客中所阐述的几十条原则中的5条。这五个特定的主题贯穿了模式和软件设计的讨论,所以在讲设计模式之前,我们先了解一下SOLID原则是什么,这篇文章我们来了解一下SOLID中的S;
Single Responsibility Principle (SRP),单一职责原则
假设你想把一些私密的事情记录下来,你懂的,那么有一个日志类是这样的,有两个私有只读字段,内容和索引;
public class Journal { //日志内容 private readonly List<string> contents = new List<string>(); //日志索引 private static int count = 0; }
那么你想要添加或者删除日志就可以这样子:
public class Journal { //日记内容 private readonly List<string> contents = new List<string>(); //日记索引 private static int count = 0; /// <summary> /// 添加日记 /// </summary> /// <param name="content">日记内容</param> public void WriteJournal(string content) { contents.Add($"{++count}: {content}"); } /// <summary> /// 读取日记 /// </summary> public void ReadJournal() { return contents; } /// <summary> /// 删除日记 /// </summary> /// <param name="index">日记索引</param> public void RemoveJournal(int index) { contents.RemoveAt(--index); } }
把方法写进类里面是有意义的,因为这是这些操作实际上就是Journal要做的事情;
假如你还想把日记保存到文件中,你将代码写成这样:
public class Journal { //日记内容 private readonly List<string> contents = new List<string>(); //日记索引 private static int count = 0; /// <summary> /// 添加日记 /// </summary> /// <param name="content">日记内容</param> public void WriteJournal(string content) { contents.Add($"{++count}: {content}"); } /// <summary> /// 读取日记 /// </summary> public List<string> ReadJournal() { return contents; } /// <summary> /// 删除日记 /// </summary> /// <param name="index">日记索引</param> public void RemoveJournal(int index) { contents.RemoveAt(--index); } /// <summary> /// 保存日记到文件中 /// </summary> /// <param name="filename">文件名称</param> public void Save(string filename) { File.WriteAllText(filename, string.Join("n", contents)); } }
这样子问题就来了,日记的职责是写日记,而不是把日记持久化到文件中;
这样做的坏处是什么呢?
- 职责不清晰
- 你的持久化任何改动都要去修改日记类会影响到日记类,假如你要持久化到云中,你就要去改代码了;
所以,这种情况我们应该把持久化的操作交给另一个类去完成,例如这样:
/// <summary> /// 持久化管理类 /// </summary> public class PersistenceManager { /// <summary> /// 保存日记到文件中 /// </summary> /// <param name="filename">文件名称</param> /// <param name="contents">日记内容</param> public void Save(string filename, List<string> contents) { File.WriteAllText(filename, string.Join("n", contents)); } }
以上就是我们所说的单一职责原则,你学会了吗?
下期我们学习另一个原则——Open-Closed Principle (OCP),开闭原则,敬请关注噢。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!