欢迎来到代码驿站!

.NET代码

当前位置:首页 > 软件编程 > .NET代码

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

时间:2022-11-12 10:12:52|栏目:.NET代码|点击:

单一职责原则(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语句有关系。最理想的设计应该是把与数据链接有关的操作封装成一个类,把执行增删改查的操作封装到另外一个类中。

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

代码下载链接:点此下载

上一篇:ASP.NET Core处理错误环境

栏    目:.NET代码

下一篇:在.NET MAUI应用中配置应用生命周期事件

本文标题:C#面向对象设计原则之单一职责原则

本文地址:http://www.codeinn.net/misctech/218819.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有