《架构师》反思:软件架构设计

简介:

最近在看《软件架构师教程》,今天就第五章《软件架构设计》总结一下,其中还有自己所联想到的。主要从以下几个方面来描述:

  • 软件架构
  • ABSD
  • 架构模式
  • DSSA
  • 架构评估

 

软件架构

架构的定义,在业界,目前主要分为两类:结构派 和 策略派。结构派认为架构是指软件中各构件的组织结构以及各构件之前的相互关系。策略派认为软件的架构设计是要为软件的每个重要的决择进行权衡,并作出最终决定。

架构,作为系统中最重要的组成部分,对整个系统有着重要的作用:

对于软件开发而言,首先,架构设计能使系统各方面质量达到预期的目标;其次,它能全过程指导开发、测试,并有效地管理软件的复杂性,降低维护成本。

在软件工程方面,架构设计能有效地支持计划的编制,支持冲突分析,使受益人目标一致。

目前对于软件架构的研究,还处于不成熟的阶段。在软件生命周期的各个阶段中,架构设计以及与软件工程的结合,也正处于摸索阶段,正在尝试如何让架构设计更好的指导工程的生命周期各阶段的活动。

 

ABSD

全称:Architecutre Based Software Development,即基于架构的开发方法。就是在架构设计后,以文档化的架构为系统的主线,指导并保证其它活动的顺利开展。

主要经历以下阶段:

image

从图中可以看出,ABSD是一个迭代的开发模型:在需求获取完成之后,需要提取出体系结构的需求,包括功能需求、质量属性及系统的约束,后再者将会成为影响架构设计的重点。架构设计到架构的复审,是一个较小的重复周期,目的是为了架构设计能通过审核达到预期的质量目标。当审核通过后,架构指导开发过程完成系统实现。过程中,可能会对架构进行演化,在一定程度上,也可以说是在做架构的重构,这时,需要再次重复整个过程,这是一个大的迭代。

具体的过程,请看以下几个图:

image image

设计过程完成后,需要对架构进行文档化,主要输入两个文档:《架构规格说明书》、用于测试体系结构需求的《质量设计说明书》

《质量设计说明书》中应该对质量目标进行定义,它也是后面进行架构评估的依据。定义时,可以依据ATAM中的5,具体内容参见本章的“架构评估”小节。

《架构规格说明书》中,应使用较成熟的架构描述方法对架构进行描述。如可采用业界目前比较认可的4+1视图。

文档的完整性是软件架构成功的关键。文档应该从使用者的角度进行编写,必须分发给所有与系统有关的开发人员、且必须保证开发者手上的文档是最新的。同时,这些输出的文档也应该面向架构评估。

复审之前,最好做一个较小的系统原型,以方便评估。

复审的目前是为了保证架构能满足软件的质量要求,架构设计的构件和层次要比较合理,架构的描述要清晰。

image image

 

架构风络

其实,架构风格就是架构模式。

模式,是在一定的环境下,不断地重复出现的一种形式。也就是说,一个特定的架构模式,有其适用的使用场景。例如,最受欢迎的三层架构,在系统较小时就不太适用。又如,面向对象的架构,在对于以数据处理为核心的应用场景也可能不太适用,同时,对于查询密集的系统使用面向对象,极大影响系统性能,反倒成为一种反模式。

架构重用,是软件架构研究的核心目标之一。对架构模式的研究,可以极大的促进业界对软件架构的重用。

 

DSSA

由于一个领域中的核心领域对象往往不会发生改变,所以对它们进行研究,可以实现核心业务的积累和重用。由于整个领域中核心对象往往不会发生改变,而围绕它们的应用,按照应用程序的类别划分后,同一类别下的应用程序往往架构也是类似的。所以对一类系统进行架构分析,就是为了找出在此类系统中通用的架构模式。

GIX4项目也是使用了基于领域的架构。准确地说,GIX4的架构是使用了领域驱动、模型驱动的产品线架构。具体架构内容,会在后面的文章《架构设计师-GIX4-架构介绍》中介绍,其中会对DSSA如何在GIX4上应用做一个较全面的讲述。

 

架构评估

在架构设计的目的中,我已经说过,架构设计最重要的目的是为了让系统能满足预期的质量需求。所以,在架构评估阶段,最重要的也就是评估这个架构是否能满足质量需求。也就是说,架构评估,重点关注的是质量属性。

在《教程》中提到,本阶段需要使用场景的方式来定义产品的质量目标。其实不然,质量目标是架构设计的重要依据,往往是在架构设计的初始阶段就已经被定义好了,也就是前面提到的架构设计阶段的输出《质量设计说明书》。虽然那时的定义不一定完整,但是一样可以在架构评估过程中,先对它进行评估,然后就可以作为架构评估过程中质量评估的基准了。

其实,就大方向上看,架构评估也是架构设计的一个部分。评估的过程,就是各专家在一起对架构初稿进行审核、提问、反思、建议。架构师以一人之力,很难把一个大型系统的架构设计得天衣无缝;这时集多人的力量在一起对初稿进行评估,可以起到查漏补缺的作用。

 

小结

架构设计是软件设计过程中最重要的活动之一,架构设计的优劣直接影响到目标系统的各个质量属性。

我认为,基于架构的开发方法,是一个很重要的方法论,我们可以用它来保证软件达到质量标准,并指导整个开发过程。同时,可以结合目前业界流行的敏捷方法来实施,这样可以在不同高度对软件开发进行控制。

目录
相关文章
|
3月前
|
存储 架构师 测试技术
架构之道——人人都是架构师
本文的探讨和编写主要围绕三个方面:架构是什么?架构师要解决的问题有哪些?解决这些问题的方法论是什么?最后作者希望人人都能具备架构师思维。
|
6月前
|
机器学习/深度学习 人工智能 架构师
【架构师】AI时代架构师必备技能
【架构师】AI时代架构师必备技能
132 5
|
23天前
|
缓存 NoSQL Java
秒杀圣经:10Wqps秒杀,16大架构绝招,一文帮你秒变架构师 (2)
高并发下的秒杀系统设计是一个复杂的挑战,涉及多个关键技术点。40岁老架构师尼恩在其读者交流群中分享了16个关键架构要点,帮助解决高并发下的秒杀问题,如每秒上万次下单请求的处理、超卖问题的解决等。这些要点包括业务架构设计、流量控制、异步处理、缓存策略、限流熔断、分布式锁、消息队列、数据一致性、存储架构等多个方面。尼恩还提供了详细的实战案例和代码示例,帮助读者全面理解和掌握秒杀系统的架构设计。此外,他还分享了《尼恩Java面试宝典》等资源,帮助读者在面试中脱颖而出。如果你对高并发秒杀系统感兴趣,可以关注尼恩的技术自由圈,获取更多详细资料。
秒杀圣经:10Wqps秒杀,16大架构绝招,一文帮你秒变架构师 (2)
|
23天前
|
缓存 NoSQL Java
秒杀圣经:10Wqps高并发秒杀,16大架构杀招,帮你秒变架构师 (1)
高并发下,如何设计秒杀系统?这是一个高频面试题。40岁老架构师尼恩的读者交流群中,近期有小伙伴在面试Shopee时遇到了这个问题,未能很好地回答,导致面试失败。为此,尼恩进行了系统化、体系化的梳理,帮助大家提升“技术肌肉”,让面试官刮目相看。秒杀系统设计涉及16个架构要点,涵盖业务架构、流量架构、异步架构、分层架构、缓存架构、库存扣减、MQ异步处理、限流、熔断、降级、存储架构等多个方面。掌握这些要点,可以有效应对高并发场景下的秒杀系统设计挑战。
秒杀圣经:10Wqps高并发秒杀,16大架构杀招,帮你秒变架构师 (1)
|
4月前
|
人工智能 供应链 架构师
软件架构一致性问题之Serverless架构处理架构一致性问题如何解决
软件架构一致性问题之Serverless架构处理架构一致性问题如何解决
51 2
|
4月前
|
存储 架构师 测试技术
架构之道:人人都是架构师(2)
每个业务系统的开发者都应该具备一定的架构师素养,架构师的重要职责不仅仅是做决策,更重要的是提升团队的整体能力。一个好的架构师应该聚焦于业务和系统,定义问题和结果,设计系统、模块和代码,同时也需要解决跨域问题,确定团队间的边界,制定规范,统一语言,并创建一个让每个人都能成长为架构师的环境,以促进团队的敏捷性。本文旨在探讨如何培养架构思维,并阐述了架构师的职责、能力模型、方法论,以及如何成为架构师。
140 10
|
4月前
|
存储 运维 架构师
架构之道:人人都是架构师(1)
架构之道:人人都是架构师
173 8
|
6月前
|
运维 架构师 安全
架构师养成手册:架构师职责
小米是一名热情的技术爱好者和架构师,他探讨了架构师的角色和职责。主要涉及六个方面:顶层设计,需与企业战略目标对齐,制定架构原则;规划可适应未来变化的企业架构,分析需求并关注技术趋势;全局视角制定可落地的架构方案,兼顾全局与局部优化;技术选型与难题解决,选择合适技术并解决实际问题;关注方案与代码的广度与深度,确保宏观设计与微观实现的统一;同时,架构师还需具备管理能力,包括团队协作、资源调配和风险管理。
189 11
|
6月前
|
架构师 微服务
什么是软件架构?架构的本质是什么?
定义 ”架构是什么“ 是件非常困难的事情,不同的组织对于软件架构有不同的定义,每个人心中也有自身对于系统架构定义的认知。就好比我们无法百分之百表述模型而只能产出模型不同维度的视图,对架构进行完备的定义是不可能的。
129 4
|
6月前
|
前端开发 Oracle 安全
软件架构设计 C/S与B/S架构的区别
C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle或SQLServer。
74 0