想做软件开发得先搞懂软件的设计原则—SOLID原则之单一职责

首先,SOLID是以下五个原则的缩写:

  1. Single Responsibility Principle (SRP),单一职责原则;
  2. Open-Closed Principle (OCP),开闭原则;
  3. Liskov Substitution Principle (LSP),里氏替换原则;
  4. Interface Segregation Principle (ISP),接口隔离原则;
  5. 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));        }    }

这样子问题就来了,日记的职责是写日记,而不是把日记持久化到文件中;

这样做的坏处是什么呢?

  1. 职责不清晰
  2. 你的持久化任何改动都要去修改日记类会影响到日记类,假如你要持久化到云中,你就要去改代码了;

所以,这种情况我们应该把持久化的操作交给另一个类去完成,例如这样:

 /// <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进行处理,非常感谢!

上一篇 2020年7月15日
下一篇 2020年7月15日

相关推荐