软件架构

总览:

架构作用:组成和决策

方法:物理逻辑数据开发运行

过程:需求分析领域建模确定关键需求概念架构设计(关键需求解决策略)细化架构(5视图)验证架构

个人技能:编码设计UML工具软件过程

比如解耦合,依赖关系角色理论设计模式

 

 

架构思想:组成+决策

领域模型:概念抽象+关系抽象| (业务)目标+用户(用例)+行为(流程)

模块划分:水平+垂直(EDD,功能模块+分层 - >细粒度 - >用例)| 自底向上(用例驱动,内外对话 - >内部协作,用例 - >鲁棒 - >时序 - >模块)

参与角色:用户客户开发管理

缘由(一下想清) - >思想(分治+迭代) - >方法(逻辑+物理) - >案例(拉出工程)

 

软件架构:3原则6步骤

需求分析:三横是顺序的方法,两纵是持续的观念| 需求就是不断交替,彼此印证的过程性的事情

领域建模: 原理=> 过程  =>内容 + 方法  + 实现

关键需求:预见->权衡->折衷

概念架构:目标->设计->选型

细化架构:5视图(组件+交互)

架构验证:验证内容+方法

 

 

 

概念思想:组件划分和交互 (组成)| 组件关系和依赖(决策)

架构=组件+交互(mvc)

架构设计,模块切分类决策 和 技术选型类决策

-------------------------------------------------------------------

架构细化(SOA),软件是由组件递归组合而成的

组件(交互)=原子组件+复合组件(框架 子系统 系统 ...)

 

领域建模,理顺概念关系,搞清业务规则,通过概念抽象和关系抽象建立模型

需求实践论,

需求工作项(业务目标 用例图  用例规约+流程建模)

提交的文档(目标列表 需求规格/用例模型+流程模型) 

所处需求层次(业务 用户 行为)

 

概念架构:1个决定(划分顶级子系统),4个选型(架构风格 开发技术 集成技术 二次开发技术)

需求分析,

高层需求分析(系统目标 需求范围  特性 上下文图)

需求分析:流程 功能(用例)  非功能

概念性架构设计:切分顶级子系统,明确关键需求(架构风格,顶级子系统构成,3大选型)

细化架构设计,前端 后端  API 插件 

 

模块划分方法,

水平,分层

垂直,功能模块,功能树

用例到类,再到模块(用例驱动,类分组,自底向上)

 

架构视图化,为用户设计

客户  不等于  最终用户

客户(理解难易度) 用户(使用难易度) 开发(开发难易度) 软件经理(管理难易度)

 

缘由,架构师不可能 一下子 想清楚

思想:分而治之(大->小)+迭代设计(已知->未知)

方法:逻辑(类 方法 接口)+物理(服务 数据 并发)

 

案例:邮件转发 

 

用例图:客户系统(提交邮件 反馈结果) 管理员系统(设置规则 和 地址 ) 定时器(发邮件) 邮件转发器(发邮件)

 

逻辑架构:用户交互+系统交互 业务逻辑 数据访问

物理架构:客户系统+管理工作站  转发服务器 数据库服务器

 

迭代(软件单元和硬件机器映射关系)

 

逻辑--

用户交互(设置地址 设置规则) + 系统交互(代理模块 Mail Server)

业务逻辑:调度 设置地址 设置规则 发送 反馈

数据访问 设置信息读写 邮件信息读写 发送结果信息读写

 

3个工程(包含的程序单元)

客户系统代理    管理员web应用 

            服务器软件

 

物理--

 

客户系统 Api

                         转发服务器 Server           数据库服务器 DB

管理工作站 Web

 

说明,多视图 不等于 多阶段,避免对某个模块一下过于深入,逻辑和物理本身就是不断相互验证 和 促进设计优化的过程 

 

 

 

3原则和6步骤:

1.看透需求:需求

需求(重大 特色 风险 | 全面 矛盾 追溯 | 功能 质量 约束)

两纵(功能 非功能)三横(目标—范围 feature 上下文 -用例模型)

+

领域模型(业务决定功能 功能决定模型)

写出业务目标  ==> 给出功能范围(现在的功能和未来的功能) 层级关系 和 用户交互逻辑  ==>建立用例模型

 

 

2.架构方向:高层架构

关键需求 功能+质量+约束==>关键功能+关键质量

+

概念架构 关键功能和质量==>鲁棒图+目标 场景 决策==>概念架构(划分子系统 | 架构风格  开发技术 集成技术 二次开发技术)

 

3.设计架构:架构设计

细化架构 不只是关键需求,而是所包括的需求,按照概念架构开始,逻辑的领域和数据的存储收在领域指导下进行

逻辑   模块  接口   领域

开发   技术  文件   编译

运行   技术  流程   同步

物理   硬件  部署   方案

数据   技术  存储   数据

+

架构原型 规避风险,尽早开发出来,尽早地验证它 

 

 

 

 

需求分析:交替进行(问题->解决->衍生问题-> … ...)

 

+用例图,

需求捕获(用户需求:用例图+用例简述)  全面

需求分析(行为需求:用例规约)               细致,可推后细化,待用户需求明确了后(需求沟通 需求启发  需求验证)

系统分析(初步设计:鲁棒图) 

 

+流程图,拿出单独的一项,判断粒度大小,粒度足够小了,判断全IT 半IIT 还是用户,如果需要IT系统协助,加入到用例图中,

 

 

 

三横是顺序的方法,两纵是持续的观念

三横(顺序):方法==>愿景=业务目标 + 高层需求(范围 特性 上下文)

--按照系统目标 

给出功能范围和强调的特性,范围广,特性可强调某几个特性,也可非常细致,可大可小

--绘制上下文图,不关注内部的功能和结构,中心+四周的UML用例,明了待开发的系统 用户 和 交互系统

--绘制用例图,系统外部的使用者Actor 和内部的功能Case,并细化其功能指向

   明确用例规约,用例名称 简要说明事件流(基本事件流+扩展事件流) 非功能需求前置条件后置条件  扩展点 优先级

 

 

两纵(持续):观念==>需求分析大局观,不拘泥于需求列表 1,2,3,二维需求观(功能 质量 约束 + 组织 用户 开发)

 

+功能(职责协作链条)—用户输入和系统动作交互, 业务规则 例外处理   特殊需求  相关功能 注释说明

+非功能:

+质量(性能:内部质量决定 外部质量)—运行(外部质量)(性能 安全 易用 可用 交互 容错) 开发(内部质量)(扩展 维护 移植 重用 测试 易理解)

+约束:各种环境限制(转化为功能+质量+环境)

 

 

 

 

领域建模: 原理=> 过程  =>内容 + 方法  + 实现

 

原理:松耦合,通过抽象接口隔离变化

过程:需求词语+界面内容==>设计+持久化数据+扩展性 (核心业务可视化-内,抽象成OO类-外)

 

内容:

UML图  模块的包含关系 顺序关系和映射关系

状态图   状态、转化原因和引起的动作,以及子状态      

扩展性  就是潜在的UML功能+状态变化

 

方法:

理顺概念关系—领域词汇(达成共识)

搞清业务规则—领域模型 (次第展开)

 

实现:

领域==>扩展功能类,   增加数据类

功能==>领域模型修改,完善数据关系 

 

 

 

明确关键需求(预见权重更大的目标)

= 关键质量(二维ADMEMS)+关键功能(核心 必须 高风险 独特)

关键需求决定架构,其他需求验证架构,

需求范围—>关键需求—>需求折衷 

 

概念架构设计

 

目标—>设计思想—>选择

 

1.功能+质量

关键功能--

原理:用例到鲁棒图,每个用例多个场景,每个场景是一串职责链条

工具:鲁棒图( v-边界对象交互  m-业务逻辑 + c-应用逻辑(控制对象 行为) 数据(实体对象 信息))

方法:增量建模,职责 -> 职责关系 -> 发现新职责

 

关键质量-目标(功能)+场景 (用户动作,和数据处理效率)+决策 (对策)

 

2.架构设计:1个决定,4个选择,先明确顶级子系统和架构风格,再明确集成和开发技术选型

 

3.备选方案:

系统组成:前端 后端 API 插件

技术选型:架构风格 应用集成  UI集成  开发技术 

 

 

需求+领域模型+概念架构==>细化架构设计(5视图 组件+交互)

(繁中带简)

逻辑(模块划分 接口定义)= 职责单元 + 协作关系

开发(技术选型 文件划分) = 程序单元 + 依赖关系

运行 = 控制流 + 同步关系

物理(硬件分布 软件部署) = 物理节点 + 拓扑关系

数据 (存储格式 数据分布)= 数据单元 + 数据关系

 

 

试试看 成本远低于 正式干 ==>架构验证

原型分类

          抛弃            演进

水平   界面探索     定型

垂直   功能探索     迭代

 

验证内容:评审开发质量-扩展 重用 理解 和 测试运行质量-性能 伸缩 高可用 安全 

验证方法:原型法(架构师最担心的 和 用户最关心的)+框架法(实现一个小的垂直原型)

==>重大技术风险是否已解决可否大规模开发 

 

 

模块划分:

1.经验

功能树(隶属关系)  功能大类  功能组   功能项

                                  用例图     鲁棒图  功能模块  

 

功能分层:上下文图—>分层

EDD:功能模块 —> 粗粒度分层—>细粒度模块—>用例驱动

通用模块,高层有较高扇入,底层有较多扇出(该模块被更多上级模块共享)

框架化,没有提取机制的情况下,机制是一种隐式代码| 重用几率和重用带来的价值量成反比

 

2.推理

用例驱动: 需求—>设计 +  先大局后细节,而不是先详细后架构

用例—> 用例规约(内外对话,系统黑盒)—> 鲁棒图(哪些些类)—>时序图(内部协作(打开系统内部黑盒) 类之间的关系)—>类划归模块,模块间接口 

 

 

 

实践使用:

 

 

  架构细节
  图片用法
  运用学习
  
  梳理需求:功能+质量+约束
  流程图(可拆分成用例图|活动成败 - >出售成败 - >打款成败)用例图(人和动作|财务:报表+审核编辑:发布+打款管理员:权限)+用例规约(系统和人交互|前置条件 - >购买成败+活动失败 - >审核(呈现操作人和时间,活动信息和打款状态) - >后置条件 - >退款+分收益)状态图(细化用例图| 未申购已申购(有结果无结果)退款中已退款分收益)明确
         
         需求:关键功能+质量
         鲁棒图(交互界面+控制逻辑+实体信息| 字段信息curd数据操作人机交互功能目的内测代码外测运行上线方案)+目标场景选择(用户操作=>数据影响==>技术方案| 导出全部excel - >数据量大==> 1.提示不要这样操作2.分批次生成多个excel,然后发送邮件)==> 1个系统4个选择(前后端测试+线上pc + wap线上线下系统人工新老功能| lanmp)
                
                实现需求:细化架构+架构验证
                细化(组件+交互:职责协作 - >代码依赖数据映射 - >物理拓扑运行同步)+验证(原型:水平/垂直+抛弃/演进=>开发质量(扩展性重用性可理解)运行质量(性能安全高可用伸缩))==>开始大规模开发


  

领域模型图(UML)用户描述 - >领域模型 - >用例图 - >用例规约(细化用户描述)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值