星空闪亮最善良的男孩儿 發表於 2026-4-26 10:14:00

.NET SOLID、高内聚低耦合、分层

<h2>一、SOLID 原则(类与方法的设计规范)</h2>
<div>&nbsp;</div>
<div>SOLID 是 5 个面向对象设计原则的缩写,目的:让代码易维护、易扩展、少出 bug。</div>
<div>&nbsp;</div>
<h3>1. S – 单一职责原则 (Single Responsibility)</h3>
<div>&nbsp;</div>
<div>一个类 / 方法只做一件事,且只做好一件事</div>
<div>&nbsp;</div>
<ul>
<li>坏:一个类同时处理「用户注册 + 发送邮件 + 日志记录」</li>
<li>好:拆成 <code>UserService</code>、<code>EmailService</code>、<code>Logger</code></li>
</ul>
<div>&nbsp;</div>
<div>
<div dir="ltr">
<div>
<pre><code>// 坏:混合了业务逻辑 + 日志 + 邮件
public class UserManager
{
    public void Register(User user) { /* 注册 + 写日志 + 发邮件 */ }
}

// 好:每个类只负责一个功能
public class UserService { public void Register(User user) { } }
public class EmailService { public void SendWelcomeEmail() { } }
public class AppLogger { public void LogInfo() { } }
</code></pre>
</div>
<div>&nbsp;</div>
</div>
</div>
<h3>2. O – 开闭原则 (Open/Closed)</h3>
<div>&nbsp;</div>
<div>对扩展开放,对修改关闭</div>
<div>&nbsp;</div>
<ul>
<li>新增功能时,新增代码,不要修改原有稳定代码</li>
<li>.NET 中常用:接口、抽象类、依赖注入实现</li>
</ul>
<div>&nbsp;</div>
<div>
<div dir="ltr">
<div>
<pre><code>// 用接口扩展,不修改原有代码
public interface IPayment { void Pay(); }
public class AliPay : IPayment { }
public class WeChatPay : IPayment { }
</code></pre>
</div>
<div>&nbsp;</div>
</div>
</div>
<h3>3. L – 里氏替换原则 (Liskov Substitution)</h3>
<div>&nbsp;</div>
<div>子类必须能完全替换父类,不破坏程序逻辑</div>
<div>&nbsp;</div>
<ul>
<li>继承不能破坏原有功能</li>
<li>不要随便重写、破坏父类约定</li>
</ul>
<div>&nbsp;</div>
<h3>4. I – 接口隔离原则 (Interface Segregation)</h3>
<div>&nbsp;</div>
<div>接口要小而专,不要大而全</div>
<div>&nbsp;</div>
<ul>
<li>不要让类实现它用不到的接口方法</li>
<li>拆分成多个专用接口</li>
</ul>
<div>&nbsp;</div>
<h3>5. D – 依赖倒置原则 (Dependency Inversion)</h3>
<div>&nbsp;</div>
<div>高层模块不依赖低层模块,都依赖抽象</div>
<div>&nbsp;</div>
<ul>
<li>这是 .NET Core 依赖注入 (DI) 的核心理论</li>
<li>代码依赖接口 / 抽象,不依赖具体实现</li>
</ul>
<div>&nbsp;</div>
<div>
<div dir="ltr">
<div>
<pre><code>// 依赖接口,不依赖具体类
public class OrderService
{
    private readonly IPayment _payment;
    // 构造函数注入(依赖倒置)
    public OrderService(IPayment payment) =&gt; _payment = payment;
}
</code></pre>
</div>
<div>&nbsp;</div>
</div>
</div>
<hr>
<div>&nbsp;</div>
<h2>二、高内聚、低耦合(模块 / 组件设计目标)</h2>
<div>&nbsp;</div>
<div>这是评价代码质量好坏最直观的标准,SOLID 就是为了实现它。</div>
<div>&nbsp;</div>
<h3>1. 高内聚 (High Cohesion)</h3>
<div>&nbsp;</div>
<div>相关的代码放在一起,不相关的分开</div>
<div>&nbsp;</div>
<ul>
<li>一个模块内部的功能高度相关</li>
<li>例:所有用户相关逻辑放在 <code>UserService</code>,不混订单、支付</li>
</ul>
<div>&nbsp;</div>
<h3>2. 低耦合 (Low Coupling)</h3>
<div>&nbsp;</div>
<div>模块之间依赖越少、越简单越好</div>
<div>&nbsp;</div>
<ul>
<li>类与类之间不直接强依赖</li>
<li>修改 A 不会导致 B、C、D 大面积报错</li>
<li>.NET 实现手段:接口 + 依赖注入</li>
</ul>
<div>&nbsp;</div>
<h3>一句话总结</h3>
<div>&nbsp;</div>
<div>高内聚:自己的事情自己管
<div>&nbsp;</div>
低耦合:别人的事情少依赖</div>
<div>&nbsp;</div>
<hr>
<div>&nbsp;</div>
<h2>三、分层思想(系统架构组织方式)</h2>
<div>&nbsp;</div>
<div>分层是把大型项目按职责拆成多层,是高内聚低耦合在项目结构上的落地。</div>
<div>&nbsp;</div>
<h3>.NET 最经典的三层架构 + 领域驱动 (常用)</h3>
<div>&nbsp;</div>
<div>
<div dir="ltr">
<div>
<pre><code>表现层 (Presentation)

应用层/业务逻辑层 (Application/BLL)

数据访问层 (DAL/Repository)

数据层 (Database/Model)
</code></pre>
</div>
<div>&nbsp;</div>
</div>
</div>
<h3>各层职责(.NET 项目结构)</h3>
<div>&nbsp;</div>
<ol>
<li>
<div>表现层</div>
<div>&nbsp;</div>
<ul>
<li>API 控制器、MVC 视图、Blazor 页面</li>
<li>接收请求、返回结果</li>
<li>不写业务逻辑</li>
</ul>
<div>&nbsp;</div>
</li>
<li>
<div>业务逻辑层 (BLL)</div>
<div>&nbsp;</div>
<ul>
<li>核心:所有业务规则、验证、流程</li>
<li>项目命名:<code>xxx.Application</code> / <code>xxx.Services</code></li>
</ul>
<div>&nbsp;</div>
</li>
<li>
<div>数据访问层 (DAL)</div>
<div>&nbsp;</div>
<ul>
<li>只做数据库 CRUD</li>
<li>常用:EF Core、仓储模式 (Repository)</li>
<li>项目命名:<code>xxx.Infrastructure</code> / <code>xxx.Repositories</code></li>
</ul>
<div>&nbsp;</div>
</li>
<li>
<div>模型层 (Model)</div>
<div>&nbsp;</div>
<ul>
<li>实体类、DTO、枚举</li>
<li>被所有层共享</li>
</ul>
<div>&nbsp;</div>
</li>
</ol>
<h3>分层的好处</h3>
<div>&nbsp;</div>
<ul>
<li>每层只依赖相邻下层,耦合极低</li>
<li>换数据库不影响业务层</li>
<li>换接口 / 前端不影响业务逻辑</li>
<li>方便单元测试</li>
</ul>
<div>&nbsp;</div>
<hr>
<div>&nbsp;</div>
<h2>四、三者关系(最重要!)</h2>
<div>&nbsp;</div>
<div>
<div dir="ltr">
<div>
<pre><code>SOLID 原则
   ↓
实现 高内聚、低耦合
   ↓
落地到 分层架构
</code></pre>
</div>
<div>&nbsp;</div>
</div>
</div>
<ul>
<li>SOLID:写好一个类</li>
<li>高内聚低耦合:设计好一组类</li>
<li>分层:搭建好整个系统</li>
</ul>
<div>&nbsp;</div>
<hr>
<div>&nbsp;</div>
<h3>总结</h3>
<div>&nbsp;</div>
<ol>
<li>SOLID:5 条规则,让类职责清晰、易扩展</li>
<li>高内聚低耦合:代码质量目标,相关代码聚合、减少依赖</li>
<li>分层思想:项目架构方案,把系统按职责拆分</li>
<li>三者是从代码到架构的完整设计体系</li>
</ol><br><br>
来源:https://www.cnblogs.com/chuansheng/p/19915116
頁: [1]
查看完整版本: .NET SOLID、高内聚低耦合、分层