优秀的软件架构应当具备以下特征:
良好的模块化:
每个模块职责明晰,模块之间松耦合,模块内部高聚合并合理地实现了信息隐藏。
适应功能需求的变化:
架构应适应技术变化,保持应用相关模块和领域通用模块的分离,技术平台相关模块和独立于具体技术的模块相分离,实现“隔离变化”的效果。
对系统的动态运行有良好的规划:
标识出主动模块和被动模块,明确模块之间的调用关系和加锁策略,并说明关键的进程、线程、排队、消息等机制。
对数据的良好规划:
包括数据的持久化存储方案、数据传递、数据复制和数据同步等策略。
明确、灵活的部署规划:
涉及可移植性、可伸缩性、持续可用性和互操作性等大型企业软件特别关注的质量属性。
高效地支持业务流程:
确保系统的稳定性和可靠性,同时保障数据和操作的安全性。
高可用性:
系统能够持续稳定运行,通常用“几个9”来表示,如“4个9”(99.99%)意味着系统每年最多有53.6分钟的不可用时间。
系统可扩展性:
系统能够适应未来需求增长和新功能的添加,而无需进行重大的架构变更。
高内聚、低耦合:
内聚的边界和耦合的边界明确,职责明确,关系清晰。
预见性设计:
架构应能持续满足业务需求,减少大规模改动的频率,降低因频繁调整带来的成本和风险。
稳定性、高性能、一致性、扩展性、观察性和安全性:
在满足业务需求的同时,平衡这些维度,以支撑当前业务的运行。
代码质量:
代码应易于理解、复用,并便于后续的修改和扩展,函数功能要单一,充分利用语言的优势。
解决业务问题:
优秀的架构应能解决当前业务面临的挑战,确保业务流程的顺畅。
支持团队协作开发:
搭建一个团队协作开发的基础,使不同小组分头对不同的系统模块深入开发,缩短项目工期。
降低维护费用:
优秀的架构设计能够降低维护费用,提高开发效率。
综合以上各点,优秀的软件架构应当在满足当前业务需求的同时,具备良好的扩展性和适应性,能够支持系统的稳定运行和高可用性,并且代码质量高,易于维护和扩展。此外,架构设计还应考虑团队的合作和项目的整体效率。