C#面向对象设计原则之单一职责原则

C#面向对象设计原则之单一职责原则

单一职责原则(SRP)

定义:系统中的每一个类都应该只有一个职责。

好处:高内聚、低耦合。

解释说明:

单一职责也就是说我们应该让一个类或一个对象只做一件事情,每个类所要关注的就是自己要完成的职责是什么,能够引起这个类变化的原因也应该只有一个,这也是后面提到的所有的设计模式都会遵守的一个原则。

高内聚:先按照面向对象的封装特性来理解,封装也就是我们说的,应该把一个类或对象它所有相关的属性、方法、行为放到一起,放到一个类中,这样就实现了一个封装的特性。那么内聚,就是一个类里面应该包含它所有的属性和行为。封装就是内聚的一种表现方式。高内聚是指我们一个类的属性和行为应该和这个类非常紧密,我们才把它放到这个类里面,反之我们就不应该把这个属性或行为放到这个类里面。

低耦合:内聚是指类的内部,耦合是指类与类之间或者模块之间相互的联系,这种联系、关系叫耦合,衡量这种耦合的程度,可以用耦合度来表示,耦合度越高说明类与类之间的联系是越紧密的,也就是相互之间的独立性比较差,也就是一个类必须依靠另外一个类才有意义,才能存在。耦合度越低,越容易重用,类也比较灵活。

错误案例1: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 单一职责_SRP_ { /// <summary> /// 会计类 /// </summary> public class Accountant { /// <summary> /// 计算工资 /// </summary> public void CalculateSalary() { // 计算工资 } /// <summary> /// 存储数据 /// </summary> public void Store() { // 存储数据 } } }

在上面的代码中定义了一个会计类,类里面有两个方法:计算工资和存储数据。一个类里面有两个职责,并且引起这个类变化的原因有很多种:一个是计算工资的方法的参数的变化会影响类的变化,存储数据的方法的变化也会影响类的变化,没有很好的实现单一职责原则,应该把计算工资和存储数据分开。

错误案例2: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; using System.Data; namespace 单一职责_SRP_ { public interface IDao { // 获取数据库连接 SqlConnection GetConnection(); // 关闭连接 void Close(); // 执行添加、更新、删除操作 void ExecuteUpdate(string strSQL); // 执行查询操作 DataSet ExecuteQuery(String strSQL); } }

上面的代码中定义了一个数据访问类,里面有两个方法:数据链接、执行增删改查的操作。数据链接一般和配置文件关联比较大。如果配置文件没有配置好、或者数据库服务没有开启,那么数据库链接可能就打不开。执行增删改查主要和SQL语句有关系。最理想的设计应该是把与数据链接有关的操作封装成一个类,把执行增删改查的操作封装到另外一个类中。

在上面的两个错误案例中,一个类都实现了两个职责,而不是一个职责,不符合单一职责的原则。这样设计类不是最完美的,建议按照单一职责的原则细分成两个类,这样就能实现高内聚低耦合。

代码下载链接:点此下载

到此这篇关于C#面向对象设计单一职责原则的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持易知道(ezd.cc)。

推荐阅读

    设计电脑系统封装|电脑系统封装教程

    设计电脑系统封装|电脑系统封装教程,,电脑系统封装教程不是的,只是虚拟机比较方便。物理机也可以的,只是要通过外界启动来ghost系统。 办法

    电脑系统封包|电脑系统怎么封装打包

    电脑系统封包|电脑系统怎么封装打包,,电脑系统怎么封装打包1、下载一个虚拟机(虚拟机比较方便操作),用虚拟机7版本。2、下载一个纯净版的系统

    电脑系统热封装|笔记本封装

    电脑系统热封装|笔记本封装,,笔记本封装通俗理解可以认为是CPU安装在主板上的方式比如一些一体机和笔记本里BGA封装是焊接死的,不好更换。

    如何封装组件vue

    如何封装组件vue,组件,函数,封装,复用,组件开发,维护,Vue 是一种流行的 JavaScript 框架,它可以帮助开发者快速构建交互式的 Web 应用。Vue 的一

    面向对象的特征是什么

    面向对象的特征是什么,抽象,方法,多态性,对象,继承,父类,面向对象的特征是:1、“抽象”,把现实世界中的某一类东西,提取出来,用程序代码表示;2、“封

    封装方法的快捷键|快捷指令封装

    封装方法的快捷键|快捷指令封装,,快捷指令封装如果你使用的是贴片元器件那么你把封装打散并移动位置后将存在很大风险导致元器件无法正常

    nodejs Controller层 封装

    nodejs Controller层 封装,操作,还可以,作者:短工邦技术部 - 陈文哲封装了MODEL层后,我们要操作哪张表,就定义对应的MODEL变量出来就行了。但

    零基础学Java第五节|面向对象一

    零基础学Java第五节|面向对象一,变量,成员,本篇文章是《零基础学Java》专栏的第五篇文章,文章采用通俗易懂的文字、图示及代码实战,从零基础

    js将form表单提交数据封装为ajax提交

    js将form表单提交数据封装为ajax提交,表单,数据,对于数据提交,html自带了form表单,以form表单里的input框的name为key值,以其所对应的value为