软件架构的设计原则

如何构建复用性高,维护性强的软件架构是面向对象设计需要解决的核心问题,那么如何构建这样的架构,在设计一个系统时,从对象的行为开始入手,将整个系统的行为抽象到具体的对象,使用协作图完善整个系统的过程,抽象出抽象类,然后再派生出具体类,具体过程遵从以下设计原则

  1. 单一职责原则:一个类只负责一项职责(职责是功能单一的一系列方法)
  2. 开放封闭原则:软件的函数、类、模块等应该是可以扩展的,但是不可修改,模块依赖于一个抽象实体,因此修改是封闭的,但是可以通过抽象派生可扩展的模块功能。
  3. 里式替换原则:所有基类出现的地方,都可以使用子类进行替换,子类可以扩展父类的功能,但不能改变父类原有的功能。
  4. 依赖倒置原则:
    (1) 高层模块不应该依赖于底层模块,二者都应该依赖于抽象;
    (2)抽象不应该依赖于细节,细节应该依赖于抽象;
  5. 接口隔离原则:
    (1)客户需要什么样的接口,就提供什么样的接口,不需要的就删除掉;
    (2)类之间的依赖关系应建立在最小的接口上。也就是说,接口中的方法要尽量的少,接口功能要尽量的细分。
  6. 组合复用原则:
    组合/聚合和继承是实现代码复用的两种基本途径,在设计过程中尽量使用组合/聚合,而不是继承。因为继承使得基类与子类有较强的耦合性,通常情况下基类的内部细节对子类来说是可见的,这样基类的实现细节会暴露给子类,破坏了系统的封装性。
  7. 迪米特法则:
    最少知识原则,一个类对自己所依赖的类知道的越少越好,对于被依赖的类,不论其实现逻辑如何,都将这些逻辑封装在自己的范围内,对外通过public(protected可以通过子类访问)方法进行提供服务,否则不对外泄露任何信息,这也体现了数据保密性。

总结:开闭原则是所有面向对象原则的核心;里式替换原则是实现开闭原则的重要方式之一;依赖倒置原则是系统抽象化的具体实现,其是面向对象设计的主要实现机制之一;接口隔离原则要求接口的方法尽量少,接口尽量细化;迪米特法则降低系统的耦合度,其使得一个模块的修改尽量少的影响其他模块,扩展会相对容易;在软件设计中,尽量使用组合/聚合而不是继承达到代码复用的目的。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平