一、引言
经典的软件设计7大原则
开闭原则(Open Close Principle, OCP)
依赖倒置原则(Dependence Inversion Principle, DIP)
单一职责原则(Simple Responsibility Principle, SRP)
接口隔离原则(Interface Segregation Principle, ISP)
迪米特法则 (Law of Demeter, LoD,又作:最少知道原则,Least Knowledge Principle, LKP)
里氏替换原则 (Liskov Substitution Principle, LSP)
合成复用原则(Composite/Aggregate Reuse Principle, CARP)
这是程序设计的经典原则。这些原则又演化出了23种设计模式。
创建型模式:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
其实这是一个演进的过程。7大原则的设计是针对早期的程序设计,而23种设计模式专门是为了设计框架所用。但是我们现在很多时候都是架设复杂得到系统,不单单是简单的程序,也不是某些组件和插件。对于大型系统我们应该也有设计原则。它是架设在7大原则和23种设计模式之上的。
二、复杂系统设计原则
1、通用性原则
通用性指的的是系统的设计可进行复用,复合行业规范。
2、隔离性原则
隔离性指的是系统具有单独的调用流程,单独的数据库。
3、权限控制原则
权限控制原则指的是系统功能的调用应该设计权限。
4、安全性原则
安全性原则指设计系统需要充分考虑网络安全性,运行安全性。
5、可扩展原则
可扩展原则只系统应该具有可扩展性,在进行扩展时不影响旧功能的运行。
6、可配置原则
可配置原则是指系统设计应该考虑系统参数可配置性
7、开闭原则
开闭原则和程序设计的原则一样,对修改应该关闭,对扩展应该开放。
8、兼容性原则
兼容性原则指新版本的系统应该兼容旧版本的系统、
9、易开发易部署原则
易开发易部署原则指开发系统应该考虑团队协助,便于开发和上线部署。
三、设计原则扩展
1. 模块化:将软件划分为小模块,每个模块应该尽可能独立和可重用,以便于修改和维护。这样可以提高软件的可扩展性和可维护性。
2. 松散耦合:减少模块之间的依赖性,降低耦合度,使得每个模块更加独立,易于维护和测试。
3. 高内聚:将具有相同功能的代码组织在一起,减少代码的重复和冗余,提高代码的可读性和可维护性。
4. 可扩展性:在设计阶段就应该考虑到软件的可扩展性,即能够满足未来需求的变化和扩展。
5. 可靠性:软件应该具备高可靠性和健壮性,能够在各种情况下正常运行,并且不易受到攻击。
6. 性能:系统应该具备良好的性能,能够处理大量的数据和用户请求,以及具有快速的响应时间。
7. 简洁性:架构和代码应该简洁明了,易于阅读和理解,避免过度设计。
8. 可移植性:软件应该具备跨平台和跨系统的能力,以便于在不同的环境中运行。
9. 可测试性:系统应该易于测试,包括单元测试、集成测试、系统测试等,以确保软件的质量和稳定性。
10. 易于使用:软件应该具备良好的用户体验和易于使用的界面,以提高用户满意度。更需要易于理解、易于学习等。
11. 安全性:软件应该具备良好的安全性,能够防止非法入侵、防止数据泄露等安全问题。保证用户数据和隐私的安全,避免被黑客攻击和恶意软件的侵入。
12. 代码可维护性:软件应该易于维护和修复,包括代码的可读性、可理解性和可扩展性等,以降低维护成本和提高代码质量。
13. 可靠性:软件应该具有高度的可靠性,即软件在正常运行的情况下能够保证正确性和准确性,同时在出现异常情况时能够有效地处理和恢复。
14. 可伸缩性:软件应该具有良好的扩展性和可伸缩性,以便于在用户数量和数据量不断增加的情况下保持性能和稳定性。
15. 可复用性:软件应该具有高度的可复用性,即软件中的模块和组件可以在其他项目中重复使用,以提高开发效率和代码质量。
16. 可追溯性:软件应该具有高度的可追溯性,即软件中的所有行为都应该能够明确地记录下来,以便于进行审核、审计和追溯。
17. 可配置性:软件应该可以方便地进行配置和管理,以适应不同的环境和需求。
18. 可移植性:软件应该可以易于迁移和移植,以适应不同的操作系统、平台和设备。
19. 可扩展性:软件应该可以方便地进行扩展和升级,以适应不同的业务需求和功能需求。
20. 可靠性:软件应该具有高可靠性,即能够稳定运行、不易出错,同时能够有效地处理异常和错误情况。
21. 可访问性:软件应该具有易于访问和使用的特点,以便于不同人群和不同能力的用户都能够使用。
22. 可安装性:软件应该可以方便地进行部署,维护和管理,以降低维护成本和提高代码质量。
23. 可定制性:软件应该具有良好的可定制性,允许用户根据自己的需要进行自定义设置,以满足个性化需求。
24. 可信度:软件应该具有高度的可信度,即用户可以信任软件的准确性、可靠性和稳定性,从而满足用户的需要。
25. 文档和注释:软件开发过程中需要撰写相关的文档和注释,以便于开发人员和用户了解软件的功能和使用方法。
26. 团队协作:软件开发过程中需要进行团队协作,包括任务分配、代码共享、交流沟通等。设计软件架构要易于团队合作和开发。
27. 技术选型:在软件开发过程中需要选择合适的技术栈和工具,以保证软件的高效开发和优秀质量。