一、为什么软件项目需要架构设计?
复杂的软件项目通常有两个特点:需求不确定和技术复杂。
技术复杂性体现在:需求让技术复杂、人员让技术复杂、技术本身是复杂的、让软件稳定运行是复杂的,而技术架构可以解决这些问题。
架构设计可以降低满足需求和需求变化的开发成本:通过对系统抽象和分解,将复杂系统拆分成若干简单的,让普通程序员也能实现复杂系统。
架构设计可以组织人员一起高效协作:拆分系统,独立完成任务后根据约定好的接口协议集成
架构设计可以帮助组织好各种技术:如分层架构,UI层、服务层、数据访问层、数据库
架构设计可以保障服务稳定运行:如分布式架构、异地多活
二、什么是架构设计?
架构设计的目标:用最小的人力成本来满足需求的开发和响应需求的变化,用最小的运行成本来保障软件的运行。
架构设计的道:把系统和团队拆分,并安排好拆分后的排列关系,让拆分后的部分能通过约定好的协议相互通信,共同实现最终的结果。系统模块之间通过接口、协议交互,人员、小组之间通过流程规范协作。
三、如何做好架构设计?
1、分析需求
产品需求只有功能描述和界面交互,还需要进一步进行抽象。
分析用例:理清主要用户角色和其使用的场景。
2、选择相似的成熟的架构设计方案
如选择基于成熟的分层架构来实现,另外还需要考虑语言和开发框架。
五种最常见的软件架构:
分层架构:每一层都有清晰的角色和分工,不需要知道其他层的细节,层与层之间通过接口通信。
事件驱动架构:通过事件进行通信的软件架构
微核架构:又称插件架构,主要功能和业务逻辑都通过插件实现,插件相互隔离。
微服务架构:SOA的升级,每一个服务就是一个独立的部署单元,通过远程通信协议(REST、SOAP)通信。
云架构:高负载、高扩展性
3、自定向下层层细化
写文档、原型设计、架构设计都建议从整体到局部,故架构设计好的实践也是自定向下层层细化。
部署架构:
分层和分模块:
用户界面层、服务层、业务逻辑层、数据访问层、数据存储。分层之后还要把相同的功能抽象出来,设计成模块。分层分模块之后就可以很好的对人员进行分工,可以细分到某一层的某个模块。
API设计、数据库设计、模块设计:
分层分模块之后,就可以设计API和数据库表。
4、验证和优化架构设计方案
技术方案完成后,需要验证方案是不是满足设计的目标、能否满足需求以及未来需求的变化、能否保障软件有效的运行。
方案的验证是贯穿整个设计始终的,一个完整的架构设计方案,需要有多次的评审会议,充分收集各方面的反馈,反复修改后才能最终确定下来。在实际开发过程中,还需要根据情况对架构进行优化和调整。
四、学习资料
架构整洁之道、架构师之路