卓越软件架构设计

卓越软件架构设计
    马上咨询


    张逸  现為(wèi)深圳大眼科(kē)技有(yǒu)限公司的首席架构师,联合创始人  

    先后就职于中兴通讯、惠普GDCC、中软國(guó)际、ThoughtWorks等大型中外企业,任职角色為(wèi)高级软件工程师,架构师,技术总监,首席咨询师。精通包括C#、Java、Ruby、Scala、Python、JavaScript等多(duō)种语言,熟练掌握面向对象思想、领域驱动设计、函数式语言、架构、大数据分(fēn)析、敏捷与过程改进,并致力于大型软件企业的面向服務(wù)系统架构设计以及互联网Web系统架构设计。在ThoughtWorks期间,作為(wèi)一名咨询师,主要為(wèi)客户提供组织的敏捷转型、过程改进、系统架构监理(lǐ)、领域设计、代码质量提升等咨询工作。目前,作為(wèi)公司产品的架构师,致力于商(shāng)业智能(néng)产品与大数据分(fēn)析平台的开发与架构设计。

    目标收益

    了解主流的软件设计方法,通过案例分(fēn)析与实践,帮助员工熟练掌握软件架构与设计技能(néng),规范开发流程;介绍常见的架构视图、架构风格与架构模式,并结合风险驱动的方式进行架构设计与演化;解构架构模式,并结合实际案例讲解各种架构模式的运用(yòng)场景,使得學(xué)员能(néng)够在项目开发中熟练运用(yòng)架构模式,改善系统的整體(tǐ)架构;开创性地提出了宏观视图、微观视图与纳米视图的MMN架构设计过程与方法,结合软件架构设计的诸多(duō)最佳实践,整體(tǐ)地介绍架构设计过程;对优良架构的特征进行分(fēn)析,保证架构遵循简单、一致和自治原则,设计出卓越的软件架构; 结合真实案例,讲解大型企业软件系统的整體(tǐ)架构与设计;融汇贯通,體(tǐ)悟设计的本质,打造高效、快速、主动

    培训对象

    思想為(wèi)體(tǐ),方法為(wèi)用(yòng),贯彻卓越软件架构设计之精神,而非流于表面形式;提倡开放的设计观,不局限于一种设计方法學(xué),而是融汇贯通,取長(cháng)补短;重视案例分(fēn)析与实践,提倡动手实验,而非单纯以讲授性质的培训;通过真实案例的演练,熟悉开发过程与设计方法;编码与设计,二者不可(kě)偏废。没有(yǒu)优秀的个人设计能(néng)力,团队就会成為(wèi)无根之木(mù),无法保证软件的高质量。必须帮助团队的每个人都能(néng)熟练运用(yòng)面向对象的分(fēn)析与设计能(néng)力,才能(néng)保证生产力的高效;培训内容由浅入深,覆盖了软件开发过程的大多(duō)数主流技能(néng)与方法,包括:OOAD、UML、RUP、 DDD、Refactoring、Design Patterns、Architecture Pat

    课程大纲

    第一单元  架构与架构视图
    软件架构是针对软件系统、子系统以及模块层次的设计过程,包括如何组织系统组件,管理(lǐ)组件之间关系以及指导设计的基本原则。

    1. 架构的定义
    • 架构的概念与定义:
      • IEEE对架构的定义。对组件的理(lǐ)解,对自治组件与服務(wù)的分(fēn)析;组件与环境的关系。
      • 案例分(fēn)析:大型银行与保险系统的客户核心系统的架构演化,通过分(fēn)析系统集成、部署以及系统间通信的方式,深入对架构的理(lǐ)解。
      • Kruchten对架构的定义。提出了架构风格的概念,并體(tǐ)现了架构演化的思想。结合Spring、Linux的设计思想,初步建立架构风格的基础知识。
    • 识别可(kě)重用(yòng)的架构资源
      • 介绍架构资源元模型,分(fēn)析开发期资源和运行期资源。通过案例介绍参考架构、架构风格与架构模式在软件架构过程中的运用(yòng)。
      • 案例分(fēn)析:商(shāng)业智能(néng)SaaS平台系统中,架构对整个系统设计的指导意义。以真实案例剖析对可(kě)重用(yòng)资源的运用(yòng)。例如在商(shāng)业智能(néng)SaaS平台中,选择了SaleForce作為(wèi)参考架构,对系统架构设计产生的影响。

    2、架构视图
    • 分(fēn)而治之的设计原则
      • 软件系统的复杂度主要来自其规模。规模越大,复杂度越高,降低复杂度的最有(yǒu)效途径就是缩小(xiǎo)规模,解决之道就是“分(fēn)而治之”,核心思想是关注点分(fēn)离。
      • 在架构设计中,通常运用(yòng)“视图”的概念对整个系统进行分(fēn)解。通过不同涉众不同角色的不同观察视角,对系统进行划分(fēn)。
    • 架构视图实例讲解
      • a. Christine提出的架构视图剖析,分(fēn)别包括概念视图、模块视图、执行视图与代码视图。
        • 案例分(fēn)析:图像处理(lǐ)系统的架构视图。对图像处理(lǐ)系统进行系统分(fēn)析,分(fēn)别建立该系统的概念视图、模块视图、执行视图与代码视图。
      • b. RUP 4+1视图
        • 介绍RUP 4+1视图的组成以及各个视图之间的关系。
        • 案例分(fēn)析:LSVT 4+1视图架构规格说明书
        • 一个真实的案例,展现了一个完全按照4+1视图进行设计的软件系统架构。
    第二单元  架构风格与参考架构
    1、REST架构风格
    • REST描述了Web作為(wèi)一个分(fēn)布式超媒體(tǐ)的应用(yòng),相互链接的资源通过交换代表资源状态的表述来进行通信。它 是WEB系统架构运用(yòng)最為(wèi)广泛的架构风格。
    • 案例分(fēn)析:订单管理(lǐ)系统的REST架构。通过案例讲述如何在架构设计中运用(yòng)REST架构。

    2、基于消息的分(fēn)布式架构
    • 分(fēn)布式架构是企业软件系统主要采用(yòng)的一种架构风格,通过使用(yòng)基于消息的中间件完成消息的发送与接收,从而实现系统之间的集成,以及业務(wù)处理(lǐ)的异步模型。
    • 案例:医疗卫生知识库系统。通过引入消息队列改善系统架构的质量。

    3、数据為(wèi)中心的软件架构
    • 一般的数据管理(lǐ)系统都分(fēn)為(wèi)三个步骤:Data Ingestion、Data Storage与Data Processing。在大数据处理(lǐ)中,这种模型體(tǐ)现得更為(wèi)明显。所有(yǒu)的软件系统都离不开数据处理(lǐ)。此外,本节内容还会讲解MapReduce架构风格,剖析MapReduce的架构原理(lǐ)和最佳实践。
    • 案例:Twitter数据管理(lǐ)与分(fēn)析,运用(yòng)Apache HDFS、Flume、HIVE,完成对Twitter数据的管理(lǐ)与分(fēn)析。

    4、基于云的软件架构
    • 基于云的软件架构可(kě)以分(fēn)為(wèi)三个层次,即SaaS,PaaS和IaaS。本节主要讲解基于元数据的多(duō)租户SaaS架构。
    • 案例:商(shāng)业智能(néng)SaaS平台的整體(tǐ)架构
    第三单元  架构模式与应用(yòng)实践
    1、分(fēn)层架构模式与实践
    • 讲解经典的软件分(fēn)层架构。

    2、微内核架构模式与实践
    • 微内核模式是架构模式中极為(wèi)重要的一种模式,尤其是它划分(fēn)功能(néng)子集為(wèi)核心功能(néng)子集的设计思想非常重要,但它的重要性却常常被人忽略。
    • 案例:商(shāng)业智能(néng)SaaS平台与Spring框架对微内核模式的运用(yòng)

    3、管道-过滤器架构模式与实践
    • 若要实现数据处理(lǐ)的良好可(kě)扩展性,有(yǒu)效降低数据处理(lǐ)的算法复杂度,就需要运用(yòng)管道-过滤器模式。
    • 案例:商(shāng)业智能(néng)SaaS平台的核心算法

    4、MVC架构模式与实践
    • MVC架构模式是最常用(yòng)的架构模式,體(tǐ)现了关注点分(fēn)离的架构原则。在介绍MVC模式的同时,还将深入分(fēn)析与比较MVC模式与MVP模式之间的异同。
    • 案例:Ruby On Rails的MVC架构

    5、CQRS架构模式与实践
    • CQRS模式即命令查询职责分(fēn)离模式,是DDD中基于事件的读写分(fēn)离架构模式。将业務(wù)逻辑建模為(wèi)状态机模型,并利用(yòng)松散耦合的命令与事件机制,采用(yòng)异步模型改善系统整體(tǐ)性能(néng)。
    • 案例:会议注册与管理(lǐ)系统的CQRS架构
    第四单元  架构核心原则与设计策略
    1、设计简单的架构
    • 设计的意图:通过清晰地表达设计意图,以简化系统的整體(tǐ)架构,并有(yǒu)利于设计者与开发者之间的沟通。
    • 案例分(fēn)析:Ruby On Rails的架构设计
    • 保证系统足够小(xiǎo),促进恰如其分(fēn)的架构设计
    • 分(fēn)而治之与关注点分(fēn)离:遵循“关注点分(fēn)离”的架构原则,将架构的分(fēn)离策略分(fēn)為(wèi)纵横分(fēn)离与内外分(fēn)离。
    • 如何化繁為(wèi)简:通过专注实體(tǐ)的职责,整體(tǐ)分(fēn)析系统目标、范围与核心概念;并通过抽象简化简化整个系统的模型。
    • 设计的演进:通过具體(tǐ)案例讲解如何运用(yòng)风险驱动进行架构的设计与演化。

    2、设计一致的架构
    • 设计风格的一致性:合理(lǐ)运用(yòng)前面讲到的架构风格,针对不同场景做出正确的架构决策。分(fēn)析基于约束对架构风格的驱动设计方式。
    • 概念的一致性:如何通过业務(wù)分(fēn)析甄别领域概念,对整个系统的领域逻辑进行建模,并利用(yòng)抽象简化模型。通过引入DDD的概念,以确定一致的设计概念,以便于开发团队的沟通和协作。
    • 解决方案的一致性:要求在系统设计时,确保针对同一个问题域采用(yòng)一致的解决方案。
    • 路線(xiàn)图:确定产品線(xiàn),制定路線(xiàn)图,作為(wèi)保证一致架构的高层蓝图。

    3、设计自治的架构
    • 最小(xiǎo)完备特征:设计最小(xiǎo)完备的对象、组件与服務(wù)。通过识别设计特征来判断实體(tǐ)是否符合最小(xiǎo)完备原则。
    • 自我履行特征:设计智能(néng)有(yǒu)意识的对象,可(kě)以通过从调用(yòng)端和提供行為(wèi)的一方双向地分(fēn)析,以改善职责的分(fēn)配。
    • 稳定空间特征:合理(lǐ)的封装,维持实體(tǐ)的边界,并提供开放空间以满足系统整體(tǐ)架构的可(kě)扩展性。划定软件系统的逻辑边界与物(wù)理(lǐ)边界,保证系统的可(kě)重用(yòng)性。
    • 独立进化特征:通过引入契约和接口,制定规范,以设计具有(yǒu)可(kě)进化性的系统。在设计时,考虑新(xīn)旧版本的兼容性,為(wèi)系统建立防腐层隔离变化。
    第五单元  MMN架构设计过程
    MMN架构设计过程是指对系统架构从宏观、微观与纳米层面的整體(tǐ)设计过程。这是一个迭代和演进的设计过程,通过自顶向下结合自下而上的方式,对整个软件系统进行分(fēn)析与设计,保证整个软件系统满足功能(néng)需求与质量属性。

    1、宏观视图的架构因素与设计过程
    • 定义架构概图:包括调查架构资源,明确架构的目标,根据架构目标做出重要的设计决策,并分(fēn)析主要的用(yòng)例场景,以建立一个粗略的架构概图。
      • 案例分(fēn)析:企业应用(yòng)套件的架构概图
    • 架构全局分(fēn)析:识别架构风险,并确定风险优先级。然后根据识别出来的风险编写架构因素表,制订具體(tǐ)的架构策略。同时确定整个系统的关键场景。
      • 案例分(fēn)析:遠(yuǎn)程访问的架构策略
    • 构建概念模型:确定技术框架与技术选型,识别并分(fēn)析软件产品的设计约束,从而确定架构风格,并根据具體(tǐ)场景运用(yòng)架构模式。
      • 案例分(fēn)析:CIMS架构概念模型
    • 建立系统的逻辑视图和物(wù)理(lǐ)视图
      • 案例分(fēn)析:集团智能(néng)信息辅助系统的架构概念模型

    2、微观视图的架构因素与设计过程
    • 细化逻辑视图:进行领域分(fēn)析,确定系统的应用(yòng)逻辑架构与业務(wù)逻辑架构,并设计整个系统的模块视图;
      • 案例分(fēn)析:汽車(chē)零售管理(lǐ)系统领域分(fēn)析
      • 案例分(fēn)析:商(shāng)业智能(néng)SaaS平台逻辑架构
    • 细化物(wù)理(lǐ)视图:执行运行时分(fēn)析,确定通信机制和资源分(fēn)配,并以此為(wèi)根据设计部署视图和执行视图
      • 案例分(fēn)析:燃气集团解决方案

    3、纳米视图的架构因素与设计过程
    • 构建设计模型:讲解职责驱动设计,通过角色、职责与协作完成对象的职责分(fēn)配,并通过识别变化点,利用(yòng)抽象对变化进行封装,以及合理(lǐ)运用(yòng)设计模式。
      • 案例分(fēn)析:数据分(fēn)析器
      • 案例分(fēn)析:商(shāng)业智能(néng)SaaS平台引擎设计
    • 代码视图:包括确定部署组件、配置管理(lǐ)、持续集成等与代码级别有(yǒu)关的内容。
      • 案例分(fēn)析:集团智能(néng)信息辅助系统的代码视图
      • 案例分(fēn)析:商(shāng)业智能(néng)SaaS平台的代码视图
    第六单元  大型软件系统體(tǐ)系架构
    1. 在線(xiàn)零售商(shāng)集成解决方案:整个系统牵涉到電(diàn)子商(shāng)務(wù)、库存管理(lǐ)、呼叫中心、邮件服務(wù)等多(duō)个系统的集成。该解决方案通过运用(yòng)分(fēn)布式系统的最佳实践,运用(yòng)基于消息的中间件,对系统进行整體(tǐ)设计,使得系统能(néng)够高质量地支撑在線(xiàn)零售商(shāng)的核心业務(wù)。
    2. 银行保险客户核心支撑系统真实案例,是某大型金融集团的客户核心支撑系统,需要支持的业務(wù)系统多(duō)达数十个,且具有(yǒu)不同的业務(wù),部署在不同的平台。如何通过合理(lǐ)地设计,运用(yòng)ESB和REST对整个系统进行集成。