软件开发七大原则
软件开发七大原则
1. 开闭原则(Open/Closed Principle, OCP)
定义:软件实体(类、模块等)应对扩展开放,对修改关闭。
目的:通过抽象和扩展来应对变化,而非修改已有代码。
例子:
- 使用策略模式:新增算法时,只需添加新策略类,而无需修改原有代码。
2. 单一职责原则(Single Responsibility Principle, SRP)
定义:一个类或模块应该只有一个职责,且该职责应完全由它完成。
目的:避免类或模块功能过于复杂,降低修改时的副作用。
例子:
- 不要让
User类同时处理数据库存储和业务逻辑验证,应拆分为UserRepository和UserValidator。
3. 里氏替换原则(Liskov Substitution Principle, LSP)
定义:子类对象必须能够替换父类对象,且不改变程序的正确性。
目的:确保继承关系的合理性,避免因子类行为异常引发错误。
例子:
- 如果父类是
Bird,子类Ostrich(不会飞),则不能在需要飞行的场景中替换Bird,否则会导致逻辑错误。
4. 依赖倒置原则(Dependency Inversion Principle, DIP)
定义:
- 高层模块不应依赖低层模块,两者都应依赖抽象。
- 抽象不应依赖细节,细节应依赖抽象。
目的:解耦模块间的直接依赖,增强灵活性。
例子:
- 高层类
UserService依赖IUserRepository接口,而非具体的SqlUserRepository实现。
倡导面向接口编程,面向抽象编程,不要面向具体编程
5. 接口隔离原则(Interface Segregation Principle, ISP)
定义:客户端不应依赖它不需要的接口,应将大接口拆分为小的、独立的接口。
目的:避免接口臃肿,减少不必要的依赖。
例子:
- 不要让
PaymentService接口包含sendEmail()方法,应拆分为PaymentProcessor和EmailSender接口。
6. 迪米特法则(Law of Demeter, LoD)
定义:一个对象应该对其他对象有最少的了解,只与直接关联的对象通信。
目的:减少对象间的耦合,降低系统复杂度。
例子:
- 避免让
Order对象直接调用Customer.getAddress().getCity(),应通过Customer提供getCity()方法。
7. 合成复用原则(Composite Reuse Principle, CRP)
定义:优先使用组合/聚合(Composition/Aggregation)而非继承来实现复用。
目的:避免继承的 rigidity(僵化)和 fragility(脆弱性)。
例子:
- 用
Logger类作为UserService的成员(组合),而非让UserService继承Logger。

浙公网安备 33010602011771号