Robert C. Martin著作的《Agile Software Development: Principle, Pattern, and Practices,敏捷软件开发:原则、模式与实践》中描述了软件设计中的臭味和面向对象设计原则,本博文系列仅是阅读笔记,也使更多的同学能够更加深入的理解面向对象设计的几个原则。
拙劣设计的症状
- 僵化性(Rigidity):设计难以改变。
- 脆弱性(Fragility):设计易于遭到破坏。
- 牢固性(Immobility):设计难以重用。
- 粘滞性(Viscosity):粘滞性有两种表现形式:软件的粘滞性和环境的粘滞性。软件面临改动时,其中一些方法会保持设计,另一些会破坏设计(即生硬的手法)。当那些可以保持系统设计的方法比那些生硬手法更难应用时,就表明设计具有高的粘滞性。当开发环境迟钝、低效时,就会产生环境粘滞性。
- 不必要的复杂性(Needless Complexity):过度设计。
- 不必要的重复(Needless Repetition):当系统中有重复的代码时,对系统进行改动会变得困难。
- 晦涩性(Opacity):混乱的表达,模块难以理解。
面向对象设计原则
- 单一职责原则(The Single Responsibility Principle, 简称SRP)
- 开放-封闭原则(The Open-Close Principle, 简称OCP)
- Liskov替换原则(The Liskov Substitution Principle, 简称LSP)
- 依赖倒置原则(The Dependency Inversion Principle, 简称DIP)
- 接口隔离原则(The Interface Segregation Principle, 简称ISP)
这些原则是数十年软件工程经验来之不易的成果,是许许多多软件开发人员和研究人员思想和著作的结晶。但仅仅因为是原则就无条件的去遵循的做法是错误的,这些原则不是可以随意在系统中到处喷洒的香水,过度遵循这些原则会导致不必要的复杂性。