应用程序和系统架构相对较容易理解,但人们对“软件架构”一词的理解不尽相同。我想把软件架构定义得尽可能简单,而不去受制于各种定义的复杂性和细微差别。对我而言,软件结构就是应用程序和系统架构的结合。
换句话说,从代码结构和基础到将代码成功部署到生产环境,与一个软件系统重要元素相关的所有东西就是软件架构。从开发者的角度考虑软件开发,关注点多数会放在代码上。在这里,我们考虑的是有助于构架更好软件的东西,比如面向对象的原则、类、接口、控制反转、重构、自动化单元测试、代码整洁和其他不胜枚举的技术实践。如果你团队里的人都只考虑这些,那么谁来考虑其他事情?
- 横切关注点,比如登录和异常处理;
- 安全性,包括认证、授权和敏感数据保密;
- 性能、可伸缩性、可用性和其他质量属性;
- 审计及其他监管需求;
- 客观环境的约束;
- 互操作性、与其他软件系统的集成;
- 运营、支持和维护的需求;
- 结构和整个代码库解决问题、实现特性的方法的一致性;
- 评估正在构建的基础有助于交付按计划进行。
有时你需要退一步,远离代码和你的开发工具。这并不意味着低层次的细节不重要,因为可用的软件最终还是要靠交付可运行的代码。细节同样重要,但就大局而言,对软件的整体视角可以确保你的代码符合整体愿景而非背道而驰。