架构是针对某类业务场景通用的解决方案,是对具体业务场景的抽象描述。架构设计又分为业务架构和技术架构。技术架构依赖于业务架构,是对业务架构的一种具体实现。良好的的技术架构一般具有以下特点:
-
简单。架构要相对简单易懂,易于理解和使用。如果架构不易于理解,将会影响其推广和使用,从某种程度上会浪费开发人员的时间,导致效率低下,增加开发的成本。简单就意味着高效,一个易于使用的架构,不但开发效率高,可维护性也大大增强。
-
独立。也就是模块化。对程序中的相似功能或者相似业务进行封装,减少冗余代码,提高代码利用率,减少开发之间。但要防止过度的模块化,将功能或者业务过度划分,会导致模块过多导致程度复杂,增加维护成本。例如将一个简单的系统分为好几个模块。模块的划分可根据通用的业务或者功能划分。功能模块要独立于业务模块,只能业务模块引用功能模块,不能循环引用。
-
健壮。也就是稳定性。针对各种异常情况,分别进行处理,保证程度正常的进行。减少崩溃的发生。例如网络请求要考虑无网,弱网,请求超时等各种情况,即使出现问题也能给用户友好的提示,让用户知道哪里出现问题,该怎么解决。对于业务流相关,要告诉用户走到哪一步了,下一步该怎么操作。
-
安全。也就是数据安全。添加一些安全策略提高系统破解的难度。安全只是相对的。没有绝对的安全。可通过不同的安全策略,来提高破解的人工和时间成本。
《架构之美》 书中第一部分论架构,对架构有了一个大概的认识
-
架构是一种折中,一种取舍。架构师要学会的就是平衡,质量与成本之间的平衡;
-
架构师首先关注的不是系统的功能,而是满足需求,满足品质;
-
架构设计要做的是让关注点分离,并且对每个关注点进行设计一定的结构,该结构都有利于解答这一个关注点所定义的问题;
-
好的架构应该是可以指导产品、开发、测试人员都对这一设计感到非常的舒适可靠,该设计覆盖了所有该软件系统相关利益的人员以及其中的关注点;
-
只设计你知道需要的东西,多余的设计是一种浪费;
-
架构几乎影响了该系统相关的所有的人和事,决定了该软件系统是否健康。
架构并不是一层不变的,随着技术的发展,业务的不断调整,架构在不断的变化。
-
单体宿主App。功能和业务在一起。通过包结构区分业务和功能,项目相对简单,使用MVC设计模式。
-
功能库和业务宿主。将通用的功能分离做成通用库,多个应用可以引用通用的库。
-
功能分离,业务分离。针对越来越复杂的App,将通用的功能进行分离,通用的业务也进行分离,通过不同的组合实现功能和业务的复用。一般使用组件化开发,组件化结构图如下图所示

架构整体演化符合 《软件架构设计》一书的一个模型图,如下图所示

架构从三个不同的角度进行演化,符合面向对象的设计原则。从技术角度上讲,将代码从类,模块,系统,一步步封装;从业务和功能来说,将功能和业务中可能需要变化的分离出来,将不可变的封装起来。从组件角度来讲,将系统分层,使系统职责分明。
系统架构设计概念完整性
关于概念完整性,在《人月神话》一书在有大量的阐述,总结如下
1)概念完整性是系统设计中最重要的考虑因素。当你的系统规模越大,这一点体现得越明显。
2)为了获取概念的完整性,设计必须由一个人或者具有共识的小型团队来完成。这一点很好理解,关于设计,可以让所有的人参与,但是决定权在少数人手里,如果大家都想参与设计,这是根本没有办法保证系统设计是统一完整的。
3)要获得概念上的完整性,就必须有人控制这些概念,类似于贵族的专制统治。这里,对于团队中的项目经理或架构师必须对项目有绝对的权威,不然,这个项目里面的就无法统一号令。
4)概念完整性表现有:
-
开发过程中,需求、设计、编码的一致性
-
整个程序具有统一的风格,比如对话框样式,按钮风格,色调等UI元素
-
整个程序具体统一的结构,比如不同模块访问网络,它们的调用方式一致,例如异步访问都用回调方式通知结果,相同的功能应该提取成通用模块。
-
开发人员能很好的执行需求人员和设计人员的意图。
-
有完整的文档,需求文档,设计文档,测试文档,处理流程的文档等。
如何保持概念完整性
-
在制度上给予保证,产品的负责人必须建立技术上的绝对权威
-
技术负责人员(SE,SL)必须严格执行项目的需求,设计,必须深入到编码细节
-
在不同阶段,保持与所有人员的持续沟通,鼓励开发人员提意见。
-
让开发人员参与设计,但不决定设计
-
通过持续的反馈和沟通来实现模块重用
根据概念完整性将架构分为三个阶段:规划、设计、构建,每个阶段架构的设计有不同职能。在规划阶段,考虑的是产品的需求、质量的需求,技术的可行性分析以及预研。在设计阶段,考虑的如果将一个复杂的系统拆分,并设计如何进行组织这些拆分的模块。在构建阶段,考虑的就是具体的实施问题,并且要保证一定的伸缩扩展性,因为架构是不断演进的。
网友评论