[架构之路-94]:《软件架构设计:程序员向架构师转型必备》-4-软件架构设计的通用过程

文火冰糖的硅基工坊 文火冰糖的硅基工坊     2023-02-05     204

关键词:

第4章 软件架构设计的通用过程

本文给出了进行架构设计的通用过程,每个步骤过程的详细方法,在后续的章节中单独探讨。

4.1 架构设计的实践脉络/步骤

4.1.1 架构设计的三大原则:看需求、把方向、细设计

(1)看透需求

所谓“全面”:特别要注意非功能性需求和约束条件!!

所谓“矛盾”:是相互制约的需求!!

所谓“追溯”:之上而下一棵树,底层的需求一定是源于上一级或上一层的进一步分解,而不是凭空产生,产生孤岛,同时高层次的需求,必须在低层次进一步分解,而不是被忽略。无论是孤岛还是断枝,都不符合追溯的原则。

(2)把方向(容易忽略)

在根据需求,确定详细的架构设计之前,需要根据部分关键性需要,确定好技术方向,并进行粗略的概念架构设计。

概率架构,不关注详细的功能模块和模块之间的接口,它关注的是宏观层面的模块划分以及采用什么样的技术方案选型、设计模式、大的架构等信息。

这个原则是容易被忽略的,特别是非复杂系统,常常被忽略。

但对于一个新设计的复杂系统,把方向是至关重要的!!!它关乎未来较长的一段时间是否需要推翻重来。

从上面的描述可以看出,概念架构主要是面向客户的,详细架构是面向开发者的。

详细架构设计与概念架构设计都是在阐述或描述目标系统,只是粗细程度不同。

(3)细设计:与程序员的接口

详细设计体现在如下几个方面:

  • 视图要全面细致

  • 功能划分要细致

  • 接口定义要细致

4.1.2 架构设计的详细步骤

路径1: 1-》5-》6

路径2: 1-》2-》5-》6

路径3: 1-》3-》4-》5-》6

全路径:1-》2-》3-》4-》5-》6

4.2 架构设计详细步骤分析

4.2.1 需求分析

两纵:功能性与非功能性需求是需求的两大分类。

三横:分析功能性与非功能性需求的三大步骤

  • 范围:需求的边界

  • feature:边界内部的功能特征

  • 上下文:业务场景

4.2.2 领域建模

业务对象模型(也叫领域模型 domain model)是描述业务用例实现的对象模型

它是对业务角色业务实体之间应该如何联系协作以执行业务的一种抽象。

业务对象模型从业务角色内部的观点定义了业务用例

该模型为产生预期效果确定了业务人员以及他们处理和使用的对象(“业务类和对象”)之间应该具有的静态动态关系。它注重业务中承担的角色及其当前职责。这些模型类的对象组合在一起可以执行所有的业务用例

领域模型不关心业务对象内部是如何实现的。

领域模型:为了更好的解读功能需求和业务用例而建立的对象模型。

领域模型:用图形化的方式描述需求的一种手段,是满足需要的技术方案的可视化展现。

4.2.3 关键需求提取

在复杂系统中,有些需求是次要的,有些需求是主要的,还有些需求是关键路径。

为了尽快验证系统的框架是否可行,需要建立软件系统的原型,而系统的原型就依赖于对关键需求的提取以及基于关键需求建立的概念模型。

关键需求具备如下特征:

  • 关键性的业务场景

  • 关键性的数据处理流程 =》关键性的功能需求

  • 关键性的性能指标 =》 关键性的质量需求、约束条件

4.2.4 概念建模/概念架构设计

基于关键性需求,设计一个简化版的概念架构,有利于在复杂系统完成之前,先建立软件系统的原型,对软件系统的方案进行快速的验证,对软件系统关键性指标进行验证。

备注:

  • 有了概念架构设计,就可以进行编码,完成原型代码的开发。

  • 至于原型代码的开发是程序员实现,还是架构师自己完成,不同的公司做法不一样,有些公司由仿真团队完成,有些公司由架构师团队完成,有些由开发团队配合完成。

  • 概念架构设计并非是必须的:对于简单系统、或已经有丰富的经验、或在已有的复杂系统之上做增量开发,而风险可控,都可能不需要概念架构设计,而直接进行一下步的详细架构设计。

  • 概念架构设计并不指定详细的模块划分详细的接口定义

4.2.5 详细架构设计

详细架构设计,是我们常说的架构设计,“详细”体现在如下几个方面:

  • 详细设计所有可能的视图,包括5大设计视图,15大设计任务

  • 定义模块以及模块之间的详细接口

  • 定义模块与模块之间的详细的交互流程

详细架构设计是软件最终编码实现的输入、是依据,开发团队就是基于详细的架构设计进行后续的编码设计与编码实现的。

4.2.6 架构验证

备注:

  • 架构验证是在概念模型的基础之上的原型验证的进一步验证,是在详解设计完成之后,在正式编码之前,对详细架构设计进行验证。

  • 架构验证不是必须的,它只针对详细架构设计中展现的“风险”进行验证。

结束语

  • 至此,架构设计与验证的主要工作就已经完成,就可以开展后续程序的设计与开发工作了。

  • 后续将对上述流程中的每个步骤单独进行详解。

[架构之路-90]:《软件架构设计:程序员向架构师转型必备》-1-总结

前言软件行业技术开发从业人员众多,但具备若干年开发经验的普通的开发人员往往面临个人发展的瓶颈,即如何从普通开发人员转型成高层次的系统架构师和技术管理人员。想成为一名架构师,应当具备全面的知识... 查看详情

[架构之路-91]:《软件架构设计:程序员向架构师转型必备》-1-从程序员到架构师,学习本书的路径

第1章从程序员到架构师本书不是从系统培训的角度,也不是按照软件的开发流程来组织内容的和展现软件架构师在不同阶段中的职责和作用,而是立足于程序员,展现程序员走向架构师的路径。1.1软件业人才结构1.1.1... 查看详情

[架构之路-100]:《软件架构设计:程序员向架构师转型必备》-10-细化架构设计

...司:有财务、研发、有销售、有生产等部门一样。10.2程序员向架构师转型的关键突破——学会系统思考目标软件就是一个系统所谓系统思考,就是整体的视角参看整个系统,从不同的视角、不同的用户、不同的层面... 查看详情

[架构之路-95]:《软件架构设计:程序员向架构师转型必备》-5-需求分析之需求列表(功能需求质量需求约束条件)

前言:在业务需求分析领域,主要完成三个输出:需求列表:功能需求、质量需求、约束条件=》第5章用例图=》第6章概念架构=》第7章上述工作,通常是由需求分析工程师或系统工程师SE完成,也... 查看详情

[架构之路-96]:《软件架构设计:程序员向架构师转型必备》-6-需求与用户用例usercase/senario建模

第6章需求与用户用例UserCase建模备注:严格意义上讲,用户用例属于需求分析领域,不属于架构设计。用户用例是架构设计最重要的输入参考之一。UserCase和UserSenario是非常重要的描述需求的重要手段6.1常用的4种用例... 查看详情

[架构之路-103]:《软件架构设计:程序员向架构师转型必备》-13-软件架构如何分层(四层架构)

第13章如何分层13.1分层架构13.1.1常见模式:展现层、业务层、数据层13.1.2案例一则13.1.3常见模式:UI层、SI层、PD层、DM层13.1.4案例一则13.2分层架构实践技巧13.2.1设计思想:分层架构的“封装外部交互”思想备注:... 查看详情

[架构之路-90]:《软件架构设计:程序员向架构师转型必备》-0-总结

...路径。今天分享的这份资料主要包含:软件开发普通程序员向系统架构师转型的一些思路、方法和工程实践。也包括转型过程中意识形态的转变、技术体系的掌握、系统工程学的拓展及各项软技能的提升等内容。本书深入剖... 查看详情

[架构之路-91]:《软件架构设计:程序员向架构师转型必备》-1-从程序员到架构师,学习本书的路径

第1章从程序员到架构师本书不是从系统培训的角度,也不是按照软件的开发流程来组织内容的和展现软件架构师在不同阶段中的职责和作用,而是立足于程序员,展现程序员走向架构师的路径。1.1软件业人才结构1.1.1... 查看详情

[架构之路-93]:《软件架构设计:程序员向架构师转型必备》-3-软件架构设计中的视图view

前言:同一个软件系统,从不同的视角View,得到不同的视觉和感受。所有的视角得到的视觉感受综合而成了整个系统的架构。有些视角是用眼睛看,有些视角是耳朵听,有些视角用探测器探。不同的人,... 查看详情

[架构之路-92]:《软件架构设计:程序员向架构师转型必备》-2-解析软件架构的概念

...;很难统一。本文是按照作者个人的理解,来展现一个程序员如何向架构师演进的路径。第2章解析软件架构概念程序员要转向架构的第一道门槛就是:什么是架构?在众多定义中,如何立足自身的实际情况和起点&#... 查看详情

[架构之路-102]:《软件架构设计:程序员向架构师转型必备》-12-粗粒度“软件架构的功能模块”划分,架构师必备基础技能

第12章粗粒度“功能模块”划分备注:(1)功能划分的基本原则:高内聚、低耦合每个子系统、子模块可以独立设计(2)划分方法功能化水平切分垂直切分分层接口12.1功能树12.1.1什么是功能树同一层次的... 查看详情

[架构之路-105]:《软件架构设计:程序员向架构师转型必备》-15-模块划分的综合技术与4步骤法

15.模块划分的综合技术与4步骤法本章把前面切分模块的各种方法都综合了起来,模块划分的综合技术与4步骤法。15.1像专家一样思考15.1.1自顶向下vs.自底向上,垂直切分vs.水平切分15.1.2横切竖割,并不矛盾15.2模块划... 查看详情

[架构之路-92]:《软件架构设计:程序员向架构师转型必备》-2-解析软件架构的概念

...;很难统一。本文是按照作者个人的理解,来展现一个程序员如何向架构师演进的路径。第2章解析软件架构概念程序员要转向架构的第一道门槛就是:什么是架构?在众多定义中,如何立足自身的实际情况和起点&#... 查看详情

[架构之路-101]:《软件架构设计:程序员向架构师转型必备》-11-原型设计与架构评估与提前验证

11.架构评估与提前验证所谓架构验证,就是在架构还没有实施之前,通过原型的方法,提前评估和验证设计的架构是否合理、是否可行。软件原型模型又叫软件快速原型模型,它指的是在执行实际软件的开发之前&... 查看详情

架构师之路系列文章

目录文章目录目录企业数字化转型架构师之路业务架构应用架构API经济数据库设计设计模式系统架构分布式系统RPC远程调用分布式消息队列分布式任务队列微服务架构ServiceComb部署架构高可靠、高可用、高并发、高性能、高可扩... 查看详情

[架构之路-99]:《软件架构设计:程序员向架构师转型必备》-9-确定关键性需求与决定系统架构的因素

第9章确定关键性需求与决定系统架构的因素9.1概念架构是什么9.1.1概念架构是直指目标的设计思想、重大选择9.1.2案例1:汽车电子AUTOSAR——跨平台复用NA9.1.3案例2:腾讯QQvideo架构——高性能NA9.1.4案例3:微软MFC架构—... 查看详情

[架构之路-98]:《软件架构设计:程序员向架构师转型必备》-8-确定关键性需求与决定系统架构的因素

第8章确定关键性需求是什么决定了软件系统的架构?!没有大的争议的是:需求决定了软件系统的架构!那么什么样的需求对软件系统的架构影响最大?8.1众说纷纭——什么决定了架构8.1.1用例驱动论:功... 查看详情

[架构之路-106]:《软件架构设计:程序员向架构师转型必备》-16-常见的十余种软件分层架构

1.软件架构体系1.1.系统与子系统系统:泛指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能单独完成的工作的群体。关联:系统是由一群有关联的个体组成的,没有关联的个体堆在一起不... 查看详情