软件开发七大原则

软件开发七大原则


1. 开闭原则(Open/Closed Principle, OCP)

定义:软件实体(类、模块等)应对扩展开放对修改关闭
目的:通过抽象和扩展来应对变化,而非修改已有代码。
例子

  • 使用策略模式:新增算法时,只需添加新策略类,而无需修改原有代码。

2. 单一职责原则(Single Responsibility Principle, SRP)

定义:一个类或模块应该只有一个职责,且该职责应完全由它完成。
目的:避免类或模块功能过于复杂,降低修改时的副作用。
例子

  • 不要让 User 类同时处理数据库存储和业务逻辑验证,应拆分为 UserRepositoryUserValidator

3. 里氏替换原则(Liskov Substitution Principle, LSP)

定义:子类对象必须能够替换父类对象,且不改变程序的正确性。
目的:确保继承关系的合理性,避免因子类行为异常引发错误。
例子

  • 如果父类是 Bird,子类 Ostrich(不会飞),则不能在需要飞行的场景中替换 Bird,否则会导致逻辑错误。

4. 依赖倒置原则(Dependency Inversion Principle, DIP)

定义

  1. 高层模块不应依赖低层模块,两者都应依赖抽象。
  2. 抽象不应依赖细节,细节应依赖抽象。
    目的:解耦模块间的直接依赖,增强灵活性。
    例子
  • 高层类 UserService 依赖 IUserRepository 接口,而非具体的 SqlUserRepository 实现。

倡导面向接口编程,面向抽象编程,不要面向具体编程


5. 接口隔离原则(Interface Segregation Principle, ISP)

定义:客户端不应依赖它不需要的接口,应将大接口拆分为小的、独立的接口。
目的:避免接口臃肿,减少不必要的依赖。
例子

  • 不要让 PaymentService 接口包含 sendEmail() 方法,应拆分为 PaymentProcessorEmailSender 接口。

6. 迪米特法则(Law of Demeter, LoD)

定义:一个对象应该对其他对象有最少的了解,只与直接关联的对象通信。
目的:减少对象间的耦合,降低系统复杂度。
例子

  • 避免让 Order 对象直接调用 Customer.getAddress().getCity(),应通过 Customer 提供 getCity() 方法。

7. 合成复用原则(Composite Reuse Principle, CRP)

定义:优先使用组合/聚合(Composition/Aggregation)而非继承来实现复用。
目的:避免继承的 rigidity(僵化)和 fragility(脆弱性)。
例子

  • Logger 类作为 UserService 的成员(组合),而非让 UserService 继承 Logger

posted @ 2025-07-29 20:37  cwp0  阅读(27)  评论(0)    收藏  举报