关于架构设计的几点理解和思考
Posted 长源动力
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于架构设计的几点理解和思考相关的知识,希望对你有一定的参考价值。
软件架构是一个系统的草图,描述的对象是直接构成系统的抽象组件,用于指导软件系统各个方面的设计。
软件工程中,架构提供了一个项目关系人之间交流的平台,明确了系统实现的约束条件,有助于原型开发和成本、进度评估。
架构作为系统的总体设计,指导后续的详细设计和编码。
架构在较高层面上实现软件复用,使基于模板的开发成为可能,有利于开发的规范化和一致性,减少开发与维护成本。
架构设计的过程和内容的不是固定不变的,通常来说包含四个阶段:预架构阶段、概念架构阶段、细化阶段、实现阶段。
3、软件架构设计5视图法:
多视图方法是业界广泛认同的一种架构设计思路,软件系统的不同的角色会站在不同的角度上提出的问题。
5视图法包括:逻辑架构视角、开发架构视角、运行架构视角、物理架构视角、数据架构视角。
从系统用户的角度考虑问题,重点是考虑软件功能性需求,包含用户直接可见的功能,还有系统中隐含的功能。设计出来的软件架构能够满足业务逻辑的需求,能够处理越来越复杂的业务逻辑需求。考虑的问题及输出各有不同,下图仅供参考:
(2) 开发架构
从系统开发人员的角度来考虑问题,为了指导开发人员如何架构系统的开发环境,设计的架构要易于理解,易于开发,易于单元测试,最好做到让开发人员可以用最少的代码行数完成功能的开发。重点关注的是开发编码实现方面的问题。开发环境包括:开发框架的选型、开发工具、编程语言、模块划分等内容。考虑的问题及输出示例如下:
不仅仅要考虑开发中涉及到的数据库,实体模型,也要考虑物理架构中数据存储的设计,即数据持久化和存储层面的问题,也可能会包括数据的分布、复制、同步等问题。考虑的问题及输出示例如下图:
从系统运行时的质量需求考虑问题,特别关注于系统的非功能需求。开发架构更关注的是程序运行前的一些准备工作;而运行架构更多考虑的是程序运行后可能发生的一些问题,关注的不再是全局而是局部,关键点与难点,因此常常需要技术攻关与预研。例如考虑质量属性:系统的功能画面的最长响应时间不超过4秒,能满足2000个用户同时在线使用,基于角色的系统资源的安全控制,还有资源争用、锁机制、同步异步、并发等等。考虑的问题及输出示例如下:
关注安装和部署的系统、网络、服务器等基础设施,考虑硬件选择和拓扑结构,软件到硬件的映射,软硬件的相互影响。考虑的问题及输出示例如下:
架构设计影响着系统的质量属性,除了满足功能性需求和非功能需求,具有易用性、实用性,稳定的架构设计还应满足高内聚、低耦合,充分考虑安全性、容错性,以及可维护性、可移植性等。
以开发物联网系统为例讨论架构设计的一些要求及重点:
(1) 架构设计通常从上至下的设计,或者说由高至低的设计。先分层(目前的绝大多数的企业级应用系统中都分为三层,即表现层,逻辑层和数据层),按不同的逻辑层来划分包,在层的包下面再按功能来划分包,注意包之间不要产生循环依赖(高内聚低耦合)。
(2) 架构不是框架,也不是简单的将几种框架或技术的组合,但框架本身也是有架构的。我们在工作中通过将许多方面的可重用的工具类,公共类,基础类等抽象出来,即可形成一些可重用的框架。
(3) 慎用、巧用设计模式。模式其实是一门工具,是人们对于过去解决某一类问题的经验总结。一个项目中不同模块不同层次可能会应用不同的设计模式,我们在设计活动中应用各种设计模式,应先分析清楚问题,注重实用性,平衡业务需求,切忌生搬硬套或过度设计。
(供稿者:梁凯宇)
以上是关于关于架构设计的几点理解和思考的主要内容,如果未能解决你的问题,请参考以下文章
游戏数值策划属性篇:关于属性设计的几点思考
DEVOPS架构师 -- 02Kubernetes落地实践之旅
有效提高ThinkPHP的应用性能的几点建议
关于架构设计的一点思考
软件架构设计分层模型和构图思考
关于缓存的几篇好文章