面向对象开发 SOLID 设计原则(C#举例)


基本定义

S: Single Responsibility Principle(SRP),单一职责原则。

A class or module should have a single reponsibility.
一个类或模块,只负责完成一项职责。

O: Open Closed Principle(OCP),开闭原则

software entities (modules, classes, functions, etc.) should be open for extension, but closed for modification.
软件实体(模块,类,方法等)应该对扩展开放,对修改关闭。

L: Liskov Substitution Principle(LSP),里式替换原则

Functions that use pointers of references to base classes must be able to use objects of derived classes without knowing it.
子类对象可以替换程序中父类对象出现的任何地方,并且保证原来程序的逻辑行为不变及正确性不被破坏。

I: Interface Segregation Principle(ISP),接口隔离原则

Clients should not be forced to depend upon interfaces that they do not use.
客户端不应该被强制依赖它不需要的接口。

D: Dependency Inversion Principle(DIP),依赖反转原则

High-level modules shouldn’t depend on low-level modules. Both modules should depend on abstractions. In addition, abstractions shouldn’t depend on details. Details depend on abstrations.
高层模块不要依赖于低层模块,高层模块和低层模块应该通过抽象来相互依赖,另外,抽象不要依赖具体实现细节,具体实现细节依赖抽象。


细则说明

SRP:单一职责原则

该原则建议设计功能合理的类,避免将不相关的功能耦合在一起形成一个大而全的类,来提高单个类的内聚性,同时也由于功能简单而减少相互依赖,进而减少了耦合性。

当然,也不是要将类拆分的越细越好,而是需要根据业务来调整,其中有一些问题可以帮助来判断是否一个类设计的过大:

  1. 类中的代码行数、函数或者属性过多
  2. 当前类跟较多类有依赖关系
  3. 私有方法过多
  4. 很难定位类的功能,或者很难给类起一个合适的名字
  5. 类中太多的方法集中操作类中某几个属性
OCP:开闭原则

该原则目标是在实现一个高扩展的类,即以最小的修改代价来完成新功能的开发,避免因为新功能对原有功能或程序产生较大的影响。

在设计时候考虑到未来需求变化的扩展性,提高扩展意识、抽象意识、封装意识是写出好扩展性代码的重要条件,有一些提高代码扩展性的思路:

  1. 使用多态
  2. 依赖注入
  3. 基于接口而非实现编程
  4. 学习使用设计模式(装饰器、策略等)
LSP:里式替换原则

该原则目标是保留父类原有的行为约定,即子类可以根据自己的功能约定实现自己的逻辑,但子类的实现不能修改父类原来的行为约定。

常见的行为约定包括:

  1. 函数声明要实现功能
  2. 对输入、输出、异常的约定
  3. 注释种罗列的任何特殊说明
ISP:接口隔离原则

该原则的目标是建立一个功能纯粹的接口,对于只是被部分调用者使用的功能需要从接口中拆分出来,避免让不需要该功能的调用者依赖。

使用接口隔离是需要在接口层面定义更细的粒度,使得程序更灵活、易扩展、易复用。

DIP:依赖反转原则

该原则一般用于指导框架层面的设计,即将程序的控制权由框架来完成(反转给了框架),避免程序员自己通过面向过程思想实现整个程序。


程序示例

SRP:单一职责原则
// 用户信息类
public class UserInfo {
   
//author: [email protected]
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

放羊郎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值