• 一线架构师实践指南笔记


    Architectural Design Method has been Extended to Method System

    Pre—Architecture阶段使命:全面理解需求,从而把握需求特点,进而确定架构设计驱动力 (ADMEMS矩阵,p27)
    Conceptual Architecture阶段:重大需求塑造做概念架构

    没有风险的软件早就开发完了!
    错的一半是金,败的一半是贝


    第3章 Pre—Architecture总论:
    1. 工作目标:
    理解需求,建立需求大局观,确定架构设计方向
    2. 关键需求决定架构,其余需求验证架构
    3. 任何需求都可以定位于业务级需求、用户级需求、开发级需求这3个层次的某一层,同时也比属于功能、质量、约束这3类需求中的一类。
    4. 可以开始架构设计的3个基本条件:
    明确的业务需求(愿景)、全面的用户需求(范围)、典型的行为需求
    5. 实践要领:
    不同需求,影响架构的原理不同(p45)
    关键需求决定架构:功能需求做减法,质量属性需求做减法,约束性需求做加法(p48)
    6. Pre-architecture阶段4个步骤:
    需求结构化、分析约束影响、确定关键质量、确定关键功能


    第4章 需求结构化与分析约束影响
    1. ADMEMS矩阵(需求层次-需求方面矩阵,p52)3个层次3个角度,理清需求结构大局:
    业务级需求:甲方要达到的业务目标、预期投资、工期要求,以及符合哪些标准、对哪些遗留系统进行整合等约束条件?
    用户级需求:用户使用系统来辅导完成哪些工作?对质量有何要求?用户群及所处的使用环境方面有何特殊要求?
    开发级需求:开发人员需要实现什么?开发期间、维修期间有何质量考虑?开发团队的那些情况会反过来影响架构?
    功能需求:更多体现各级直接目标要求
    质量属性:运行期质量 + 开发期质量
    约束需求:业务环境因素 + 使用环境因素 + 构建环境因素 + 技术环境因素
    2. 4类约束(在ADMEMS矩阵中的位置,p54):
    业务环境:上线时间要求、预算限制、集成需要、业务领域、业务规则、业务限制、相关法律法规、专利限制
    使用环境:用户阶层、年龄段、编号、是否遍及多个国家、使用场所是否有电磁干扰、车船移动
    构建环境:开发团队技术水平、磨合程度、分布、开发管理、源码保密等
    技术环境:当前技术环境(技术平台、中间件、编程语言等的流行度、认同度、优缺点等)
    3. 约束是架构设计要解决的问题的上下文(软件需求=功能需求+质量属性+约束),图解p56
    4. ADMEMS矩阵方法应用法则:
    推导法则:从上到下,从右到左
    查漏法则:重点是质量属性遗漏


    第5章 确定关键质量与关键功能
    1. 在需求结构化的基础上,确定关键质量着重完成的2项任务:
    根据系统所在的领域特点及系统规模等因素,确定架构设计重点支持哪些质量属性(如重点支持高性能、可扩展性等)
    分析质量属性之间的制约关系,第一时间制定权衡折衷的具体策略(如明确高性能是第一位的,可扩展性与高性能相矛盾时应照顾高性能要求,是否引入支持可扩展系能的设计需要经架构组评审)
    2. 确定关键质量的5大原则(整体思路图p65):
    分类合适 + 必要扩充
    考虑多方涉众
    检查性思维
    识别矛盾 + 划分优先级
    严格程度符合领域与规模特点
    3. 确定关键功能的4条规则:
    核心功能:业务层接口要反映的功能
    必做功能:文档”项目愿景的解决方案“中主要特征应作为备选项、支持”运营“的功能
    高风险功能:需要将风险高的功能选入关键功能子集
    独特功能:覆盖前3类功能没有涉及到的职责
    (注意,关键功能子集并不存在标准答案,关键功能所占比例应灵活确定:功能少的系统比例高些,功能多的系统比例少些)

    第7章 概念设计总论
    1. 概念架构是大型系统架构设计成败的关键
    2. 架构 = 组件 + 交互,机构设计的驱动力 = 功能 + 质量 + 约束
    3. 概念架构设计3个步骤:
    初步设计、高层分隔、考虑非功能需求

    第8章 初步设计
    1. 初步设计并总是必须的--架构师只有在设计复杂系统时才需要它
    2. 初步设计的目标简单而明确:发现职责!
    3. 鲁棒图3元素(与MVC区别p94):
    边界对象
    控制对象
    实体对象
    4. 鲁棒图的作用:
    初步设计
    检查用例规约是否正确和完善
    5. 需求分析、系统分析、初步设计:
    需求分析 != 系统分析, 系统分析 约等于 初步设计
    用”做什么“和”怎么做“来区分分析与设计,并不全面(系统分析实际上已经包含了部分设计)
    需求捕获、需求分析,以及系统分析之间的关系见p97
    6. 鲁棒图建模10条经验:
    详细见p98
    鲁棒图建模规则:
    参与者只能与边界对象交谈;
    边界对象只能与控制对象和参与者交谈
    实体对象只能与控制对象交谈
    控制对象既能与边界对象交谈,也能与控制对象交谈,但不能与参与者交谈
    鲁棒图建立技巧:
    发现鲁棒图3中元素的思维方式间p99图8-9
    增量建模
    7. 明确几点:
    初步设计的目标是发现职责,为高层切分奠定基础
    初步设计不是必须的,但当待设计系统对架构师而言并无太多直接经验时,则强烈建议进行初步设计
    基于关键功能(而不是所有功能),借住鲁棒图(而不是序列图)进行初步设计

    第9章 高层分割
    1. 2中套路:
    切系统为系统
    切系统为子系统
    2. Tier & Layer:逻辑和物理


    第10章 考虑非功能需求


    第11章 细化架构的故事
    1. 架构师各项具体工作p130,图11-2

    第12章 Refined Architecture总论
    1. 概念设计 -> 逻辑设计 + 物理设计 (逻辑设计和物理设计是2个并行阶段!)
    2. 有角度就有空间,每个视图对应一组关注点,p139图12-7


    第13章 逻辑架构
    1. 对于大部门团队来说,为了快速迭代,应该:做一个高级的广度设计,然后马上转到深度优先的底层设计和实现上去
    2. 划分子系统的3种必用策略:
    分层(Layer细化)
    分区(分区是一种单元,它位于某个层的内部,其粒度比层小)
    机制的提取(机制:预先定义好的、能够完成预期目标的、基于抽象角色的协作方式,包含:协作关系+协作流程)
    3. 划分子系统的4个通用设计原则:
    职责不同的单元划归不同子系统
    通用性不同的单元划归不同子系统
    需要不同开发技能的单元划归不同子系统
    兼顾工作量的相对均衡,进一步划分太大的子系统
    4. 协作决定接口(不是:我的接口我做主)
    5. 质疑驱动的逻辑架构设计:质疑驱动、结构设计和行为设计相分离


    第14章 物理架构、运行架构、开发架构
    1. 物理架构设计工作内容:
    硬件选择与物理拓扑
    软件到硬件的映射关系
    方案的优化
    2. 运行架构设计工作内容:
    确定引入哪些控制流(进程、线程、终端服务程序)
    确定每条控制流的任务
    控制流的创建、销毁、通信机制等
    控制流之间的同步关系、资源争用时的加锁机制
    3. 开发架构设计的工作内容:
    将逻辑职责映射为程序单元(可重用的库、框架,要自主编写的源程序,shell脚本、平台支持下的配置文件等)
    开发技术选型(语言、工具)
    程序单元间关系:project划分、project目录结构、编译依赖关系


    第15章 数据架构的难点:数据分布
    1. 数据分布的6种策略:
    独立Schema(Application不同,Schema不同):可减少系统间无谓的相互影响,避免人为地将问题复杂化
    集中(集中存储、分布访问):
    分区(相同的应用程序、不同的应用程序部署实例;系统的数据模型、不同的数据值):水平分区(地域)应用较多、垂直分区(应用程序)应用较少
    复制(通过实时或快照方式保持多个数据副本之间的数据一致)
    子集(某节点因功能或非功能考虑而复制全体数据的一个相对固定的子集):减少数据传递开销、节省存储成本
    重组(不同数据节点因要支持的功能不同,而以不同Schema复制数据):如数据从生产系统到BI系统
    6种策略二维比较图见p179图15-8
    2. 6种数据分布策略的3条应用原则:
    把握系统特点,确定分布策略(合适原则)
    不同分布策略,可以综合运用(综合原则)
    从对吗、好吗两方面进行评估优化(优化原则)

    第18章 目标-场景-决策表
    1. 场景5要素:
    影响来源、如何影响、受影响对象、问题或价值、所处环境

  • 相关阅读:
    API---CreateIoCompletionPort
    Socket()与WSASocket()的区别
    HeapCreate
    WSAStartup()函数的使用
    makeword()
    WSAData是个什么结构体用什么用
    hostent结构体和wsadata结构体
    【C++11新特性】
    【C++11新特性】 auto关键字
    【C++11新特性】 nullptr关键字
  • 原文地址:https://www.cnblogs.com/Langzi127/p/2961773.html
Copyright © 2020-2023  润新知