应用系统设计应该遵循一些的设计的基本原则,其实这些思想也是源于GOF的设计模式的总结,在创建一个低成本,高可用、高扩展性、低耦高内聚的应用程序,我们需要遵循的一套规范性的东西,简称SOLID,SOLID由可分为以下几点:
1、Single Responsibility Principle(单一职责原则)
2、Open Close Principle(开-闭原则)
3、Liskov Substitution Principle(里氏代换原则)
4、Interface Segregation Principle(接口分离原则)
5、Dependency Inversion Principle(依赖反转原则)
简单介绍这几个原则:
1、单一职责原则:每个类应该只有一个独一无二的职责,或者说每个类只能有一个主要功能,每个类应该尽可能少的依赖其他类,这也体现了封装的概念。
2、开-闭原则:每个类,应该对“扩展”进行开放,而对“修改”进行封闭,也就是支持扩展,而不是支持修改,当然完全符合这个原则稍微有点难度,确切的说是保证最小限度的修改代码来实现系统的功能扩展,比如:继承、设计模式中的几个创建型模式都是在尽量的解决此问题,而不是通过修改既有代码。
3、里氏替换原则:子类型必须能够替换掉他们的父类型。在一个软件实体如果使用的是一个父类的话,那么一定适合于其子类,而且他观察不出父类对象和子类对象的区别,也就是说,在软件里面,把父类都替换成它的子类,程序行为没有变化。
4、接口分离原则:接口的职责也应该是单一的,接口中应该包含哪些方法,需要进行严格的评估,如果其中某些方法的职责于接口的本身定义不相符合,则应该将其分离到其他接口中。类需要根据其调用所需要的不同接口类型,来暴露不同的接口,同样也是类单一职责的体现。
5、依赖反转原则:也叫依赖倒置原则,抽象不能依赖于具体,而具体则应该依赖抽象。类之间的直接依赖应该用抽象取代,这样做的一个优点是,我们可以实现自上而下的设计:在下层的具体实现还没有确定的情况下,只要能够在抽象层将接口确定,能够完成上层的设计与开发,同时实现测试,实现领域模型的建立。
除了SOLID原则之外,还有几个关键的设计原则需要注意:
1、AOP(Aspect-oriented Programming):面向切面编程,在系统设计中,我们在权限检查、操作管理、日志记录以及测量/计量等功能的实现时候,我们要将Cross-Cutting(横切面)的代码从特定于应用程序的逻辑分离出来,将这些代码与应用系统业务系统逻辑混在一起回增加系统的复杂性,而且会扰乱程序的逻辑,在OO思想大面积的关注于对象的封装,垂直体系的建立的影响下,面向切面无疑是一种填充。
2、关注点分离(Seperation of Concerns,SOC):将应用系统分成多个字部分(子系统),各个部分之间的功能不要重复,其目的就是减少交互点,以实现高内聚和低耦合。
3、Don't Repeat Youself(DRY):一个特定的功能只能在某个特定的组件中实现一次,同样的功能不要在多个组件中重复多次,责任分离
4、避免YAGNI(You Ain't Gonna Need It)效应:只考虑和设计必须的功能,避免过度设计。