高级系统架构设计实战课程
课程天数:3天
课程介绍
本课程通过介绍软件架构视图和软件文档,软件架构设计过程,软件架构应用与常用的架构模式/策略/原则等诸多架构实际问题,透视软件架构是如何设计和实现的。并且介绍应该如何应用系统架构设计为后期的详细设计和应用开发提供指导。 此外,由于在实际的软件开发中,架构设计前期不可能考虑清所有的问题,从而设计包容一切的完美架构,故针对大多数企业目前是维护遗留系统的现状, 本课程介绍了软件架构的监控,架构的坏症状和重构方法。针对软件架构常见设计技术方面,本课程用专题讨论的方式,对此进行了分析,并提出解决方案,并结合众多大型软件项目架构案例进行更深入的剖析。
课程收益
培训内容从实用性、规范性和系统性出发,通过培训使学员掌握软件架构的基础知识、设计原则、设计模式、设计方法,熟悉主流架构技术,了解规范的软件项目管理流程,并且通过大量的典型的案例,揉合讲师的大型项目经验,以项目过程中的问题带动原理的描述,从理论和实际的结合上有重点的讲清问题,使其达到高级系统架构师的基本要求。
培训对象
开发团队中的设计人员、系统分析人员,开发主管或项目经理,以及有望或有志成长为以上角色的技术人员。
课程大纲
第一单元:软件架构视图
• 软件架构视图的意义,软件架构师的多维思考
• 逻辑视图、开发视图、物理视图、运行视图、场景视图、数据视图、功能视图
• 如何和怎样绘制软件架构视图
• UML建模工具在架构视图的应用
• 典型案例分析:结合多个项目实例,进行分析软件架构视图
第二单元:架构设计中如何进行的模块划分及职责分配
内容一:模块及组件的职责分配设计
• 分层与分区的考虑
• 基于面向对象的组件职责分配
• 组件职责分配的深入探讨
• 大型组件与小组件职责分配的探讨
• 典型案例分析:如何为模块合理地分配职责,某收款系统、税务系统的组件设计
内容二:组件创建及装载设计
• 组件的动态装载
• 组件创建者的选择原则
• 架构中常见的组件创建方式
• 典型案例分析:某数据解析系统设计,阐述构件创建的要点
内容三:如何设计出高内聚低耦合的架构
• 组件的粒度把握原则
• 不同类型的模块及其复用方式
• 面向过程式或面向对象组件的选择
• 在不同的模块中隔离不同的关注面
• 用单一职责原理指导架构设计
• 典型案例分析:某Html分析系统、某文档验证系统设计,分析高内聚低耦合的重要意义
内容四:架构设计中如何有效地组织多个组件/模块
• 设计控制器模块
• 控制模块与其它模块的交互
• 设计不同类型的模块在系统中的交互机制
• 对过大组件/模块的分解原则及实践
• 典型案例分析:某文档验证系统设计,阐述对系统的整体把握能力
内容五:如何设计出灵活性及可扩展性高的架构
• 如何设计出可扩展的架构
• 多态在组件设计中的使用
• 间接模式在架构设计中的价值及其使用
• 接模式在基于架构的架构中的运用
• 典型案例分析:UIM系统设计,如何构造灵活而可扩展的系统
内容六:架构的鲁棒性设计
• 隔离不同的关注面
• 如何封装组件设计中的变化
• 组件设计中的开-闭原则
• 包内聚原则及其运用
• 包耦合原则及其运用
• 典型案例分析:税务系统、演示汇报系统实例进行分析
第三单元:架构中需要考虑的几个维度
内容一:考虑运维的因素
• (现场)系统部署
• 补丁服务的考虑
• 升级策略对架构设计的影响
• 故障诊断策略
• 问题管理策略
• 典型案例分析:结合项目实例,进行分析该阶段的主要任务和相关成果
内容二:考虑系统运营的因素
• 商业模式对架构设计的影响
• 软件对不同角色的可操作性
• 软件流程的设计
• 软件商业质量属性分析
• 软件约束条件与架构的影响
• 典型案例分析:结合多个项目实例,分析质量需求、约束对架构的影响(项目错误的架构,导致反复迭代)
内容三:考虑技术的因素
• 运用系统方案(系统功能分解:系统、子系统、模块和部署模式)
• 数据库方案
• 文件存储方案
• 伸缩性
• 可扩展性
• 典型案例分析:结合多个项目实例,分析技术的因素对架构的影响
内容四:架构重构
• 软件架构重构还是重写
• 软件架构重构技巧
• 软件架构复用
第四单元:核心业务逻辑层架构设计
内容一:业务逻辑层中的子层设计
• 业务逻辑层组件设计
• 业务逻辑层工作流设计
• 服务facade设计
• 业务逻辑层实体设计
• 充血模型、贫血模型、失血模型的博弈及案例分析
• 分布式应用场景
• 业务逻辑层框架(EJB,Springframework,.Net框架)
内容二:典型案例分析
• 订餐系统,逻辑子层分析及设计中的要点
• 杂志订阅系统,需求分析到领域分析,业务逻辑层的设计要点
• 媒体墙系统,分析系统的组件划分及业务逻辑层划分
第五单元:架构设计中的关键技术策略
内容一:大型系统的及发展及核心技术
• 应用服务和数据服务分离
• 使用缓存改善避免数据库瓶颈
• 应用服务器集群和负载均衡避免运用服务器瓶颈
• 数据库读写分离
• 用CDN及分布式文件系统加速系统响应
• 分布式数据库系统及NoSQL运用
• 进行横向的业务拆分
• 分布式服务,打造自己的软件生态环境
内容二:系统的负载均衡策略
• HTTP 重定向负载均衡
• DNS 域名解析负载均衡
• 反向代理负载均衡
• IP(NAT)负载均衡
• 数据链路层负载均衡
• 负载均衡算法-hash一致性算法
内容三:系统的缓存策略
• 客户端缓存策略(浏览器缓存、本地Navtive代码缓存)
• 代理服务器缓存
• CDN缓存
• 反向代理服务器缓存
• Memcached分布式缓存集群的伸缩性挑战
• 分布式缓存的一致性Hash 算法
• 典型案例分析:缓存策略如何应用在自己的实际项目中
第六单元:设计原则及设计模式
内容一:面向对象设计原则及其分析
• 软件设计目标,基本原则和模式关系
• 开闭原则
• 依赖倒置原则
• 单一职责原则
• 里氏替换原则
• 合成/聚合复用原则
• 接口隔离原则和Demeter法则
• 通过案例进行分析,模式如何使用
内容二:常见架构设计原则及其分析
• 抽象(Abstraction)、封装(Encapsulation)和信息隐藏(Information Hiding)
• 分而治之(Divide-And-Conquer)和模块化(modularization)
• 松耦合和高内聚(Coupling and Cohesion)
• 策略和实现的分离(Separation of Policy and Implementation)
• 接口和实现的分离(Separation of Interface and Implementation)
• 单一引用点(Single Point of Reference)
• 典型案例分析:架构原则在实际项目中应用(奥运项目案例)
内容三:案例分析—OO基本原则(多个小案例,不涉及特定的业务)
• 通过经典面向对象案例,要求学员分别使用过程式和面向对象2种思维,进行设计
• 进行对比2种思维的不同点和结果
• 通过案例指出OO是否真正做到了它所说的价值
• 这些小案例涉及项目开发中的常见的困境、疑惑,本节探讨如何通过设计原则解决。
• 讨论设计原则与设计模式的关系,已经在没有合适模式可用的情况下如何分析、解决问题。
第七单元:设计模式与软件设计思想
内容一:常见的设计模式及其运用
• 使用GOF设计模式,借鉴前人的经验。
• 分析创建型模式:单例模式(Singleton)、工厂模式、抽象工厂模式(Abstractfactory)
• 分析结构型模式:桥梁模式(Bridge)、装饰模式(Decorator)、适配器模式(Adapter)、代理模式(Proxy)、组合模式(Composite)
• 分析行为型模式:命令模式(Command)、观察者模式(Observer)、状态模式(State)、策略模式(Strategy)、模板方法模式(Template Method)、访问者模式(Template Method)
• 典型案例分析:分析薪酬管理、订单管理系统等多个案例,展示设计模式在架构设计中的实际应用
内容二:设计模式的本质探讨
• 指出什么是优秀设计和丑陋设计
• 总结自己的模式-神似而非型似
• 探讨相似模式的本质
• “间接类”模式的推演及演化
• “流程类”模式的推演及演化
• 避免模式的误用,讨论模式的陷阱:在看似典型的场景,但不宜使用模式的场合。
内容三:案例- 元搜索系统分析及设计
• 简单背景介绍
• 如何面对纷繁的变化因素的组合
• 一定要使用模式吗——如果能很好地能抽象、隔离不同因素,也许它就是模式。
• 讨论Command模式的本质。
内容四:案例- 电子文件生成器
• 简单背景介绍
• 使用模式的第一反应,及陷入陷阱的思索
• 具体场景使用模式的本质讨论
• 多态的本质
• 讨论并介绍表驱动法
• Template Method、DIP原则Strategy模式的的灵活使用——获得优雅的设计
第八单元:IOC原理在可复用软件框架中的运用
内容一:系统接口设计
• 接口的意义
• 所知最少原则
• 组件接口的设计
• 接口隔离原则
• 子系统接口的设计
• 典型案例分析:文件处理系统实例分析,如何设计一个极度的松耦合接口
内容二:IOC原理在可复用软件框架中的运用
• Spring中的IOC运用
• 理解IOC的本质
• IOC及DIP原则的运用
• 服务组件的设计
• 功能组件的设计
• 不依赖于框架的IOC实现
内容三:案例分析
• 典型案例分析:多功能文件处理系统的设计分析,采用逐步深入的方式,抽丝剥茧,展现如何设计一个优雅而高效的文件处理框架。
第九单元:数据访问层设计(持久层设计)
• 数据库设计中的常见问题
• 分布式数据库设计的6种模式
• 伪分布式数据库设计的优劣及运用
• 数据表设计的6种模式
• 数据表设计中的反规范化
• 海量数据技术:如何提高效率
• 数据ORM的常见问题
• 结合多个实际项目进行分析,总结6种数据库设计模式及数据表设计模式,分析其实用条件。
第十单元:大型软件系统架构实践与剖析
• 超市收款系统软件架构案例研究
• 网络数据钻取及分析软件架构案例研究
• 某政府项目软件架构案例研究