课程简介
本课程中解决的实际问题如下:
帮助IT企业解决获得可重用的架构设计的完整方案;
揭示软件设计原理及设计过程;
帮助架构师掌握架构设计方法与架构设计的模式;
帮助设计人员掌握软件模块划分,及如何为模块划分职责;
帮助设计人员掌握领域分析与建模的正确方法;
帮助IT数据结构设计及实例等;
帮助甲方解决软件架构评估问题;
目标收益
培训对象
课程大纲
软件架构视图 |
软件架构视图的意义,软件架构师的多维思考 逻辑视图、开发视图、物理视图、运行视图、场景视图、数据视图、功能视图 如何和怎样绘制软件架构视图 UML建模工具在架构视图的应用 典型案例分析:结合多个项目实例,进行分析软件架构视图 |
架构设计中的模块划分及职责分配——GRASP原则 |
架构/模块设计中,如何划分模块,如何分配模块的职责是重要的内容。本节结合多个案例,回答: 如何进行架构设计,什么是好的架构,怎么验证架构的合理性? 如何进行组件(模块化)化设计,在架构基础上保证组件及框架的复用? 内容一 模块及组件的职责分配设计 分层与分区的考虑 基于面向对象的组件职责分配 组件职责分配的深入探讨 大型组件与小组件职责分配的探讨 典型案例分析:如何为模块合理地分配职责,某收款系统、税务系统的组件设计 内容二 组件创建及装载设计 组件的动态装载 组件创建者的选择原则 架构中常见的组件创建方式 典型案例分析:某数据解析系统设计,阐述构件创建的要点 内容三 如何设计出高内聚低耦合的架构 组件的粒度把握原则 不同类型的模块及其复用方式 面向过程式或面向对象组件的选择 在不同的模块中隔离不同的关注面 用单一职责原理指导架构设计 典型案例分析:某Html分析系统、某文档验证系统设计,分析高内聚低耦合的重要意义 内容四 架构设计中如何有效地组织多个组件/模块 设计控制器模块 控制模块与其它模块的交互 设计不同类型的模块在系统中的交互机制 对过大组件/模块的分解原则及实践 典型案例分析:某文档验证系统设计,阐述对系统的整体把握能力 内容五 如何设计出灵活性及可扩展性高的架构 如何设计出可扩展的架构 多态在组件设计中的使用 间接模式在架构设计中的价值及其使用 接模式在基于架构的架构中的运用 典型案例分析:UIM系统设计,如何构造灵活而可扩展的系统 内容六 架构的鲁棒性设计 1)隔离不同的关注面 2)如何封装组件设计中的变化 3)组件设计中的开-闭原则 4)包内聚原则及其运用 5)包耦合原则及其运用 典型案例分析:税务系统、演示汇报系统实例进行分析 |
架构设计过程 |
内容一 商业架构设计 软件功能需求对架构的影响 软件质量需求对架构的影响 软件商业质量属性分析 软件约束条件与架构的影响 确定架构目标 系统功能分解(系统、子系统、模块)和部署模式 典型案例分析:结合多个项目实例,分析质量需求、约束对架构的影响(项目错误的架构,导致反复迭代) 内容二 逻辑架构设计 软件架构立方体图 软件架构模式和架构师经验的引入 使用质量场景属性进行迭代架构设计 综合初步设计,确定高层分割(分层 分服务 分区 通信) 典型案例分析:结合项目实例,进行分析该阶段的主要任务和相关成果 内容三 物理架构设计 数据模型视图 结合逻辑架构,设计物理部署 内容四 架构重构 软件架构重构还是重写 软件架构重构技巧 软件架构复用 架构重构的4种方案及模式 |
核心业务逻辑层 架构设计 |
内容一 业务逻辑层中的子层设计 业务逻辑层组件设计 业务逻辑层工作流设计 服务facade设计 业务逻辑层实体设计 充血模型、贫血模型、失血模型的博弈及案例分析 分布式应用场景 业务逻辑层框架(EJB,Springframework,.Net框架) 内容二 典型案例分析 订餐系统,逻辑子层分析及设计中的要点 杂志订阅系统,需求分析到领域分析,业务逻辑层的设计要点 媒体墙系统,分析系统的组件划分及业务逻辑层划分 |
质量属性驱动 架构设计策略 |
什么是系统质量属性,如何进行质量属性进行驱动架构设计 架构和质量属性的关系 如何获得可维护性、可扩展性、可靠性、互操作性,系统性能,安全性等 系统架构的可靠性设计策略 系统架构的可修改性设计策略 系统架构的性能设计策略 系统架构的安全性设计策略 系统架构的易用性设计策略 系统架构质量属性和架构模式的应用 典型案例分析:架构策略如何应用在自己的实际项目中 |
设计原则及设计模式 |
内容一:面向对象设计原则及其分析 软件设计目标,基本原则和模式关系 开闭原则 依赖倒置原则 单一职责原则 里氏替换原则 合成/聚合复用原则 接口隔离原则和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是否真正做到了它所说的价值 这些小案例涉及项目开发中的常见的困境、疑惑,本节探讨如何通过设计原则解决。 讨论设计原则与设计模式的关系,已经在没有合适模式可用的情况下如何分析、解决问题。 |
软件架构模式 |
内容一 常见的架构模式/风格 分层架构模式 Pipe/Filter Pattern 黑板/看板(blackboard)模式 MVC/PVC Pattern Event-Based Pattern和Microkernel Pattern 分布式和并发架构设计模式 解释器和黑板模式 其他模式的介绍(元数据等) 典型案例分析:软件架构模式如何应用在自己的实际项目中 内容二 典型案例分析 某数据抓取分析系统 某模式识别系统 某多媒体制作系统 通过典型案例分析,总结架构师实际项目架构的经验和应用 |
设计模式与软件设计思想 |
内容一 常见的设计模式及其运用 使用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种数据库设计模式及数据表设计模式,分析其实用条件。 |
系统内间通信设计 |
系统通信设计原则 常见跨进程通讯的手段 大数据量交互的通讯手段 异构系统间常见的通讯手段 基于消息队列及控制的通讯手段 基于本地SDK的通讯手段 基于数据库的数据交换方案 服务器推技术及对现代软件的影响 协议选择对性能的考虑 同步及异步的通讯手段 典型案例分析:结合项目实例分析,系统内/间的通信设计 |
部分软件应用类型和架构风格鉴赏 |
基于树形结构的分布式系统 基于总控端的分布式系统 基于P2P的分布式系统 基于数据网关交互的BS系统 基于集中控制的BS系统 复杂消息控制的桌面运用系统 松散耦合的桌面系统 组件化的桌面系统 基于脚本解释器的桌面系统 其他系统,分析其优劣 典型案例分析:分析实际的项目案例,赏析系统的不同架构风格,并评说其利弊 |
架构设计步骤总结及实践 |
静态设计:子系统、分层及分区;职责分配 模块间的通信及耦合设计:组件式编程、考虑通讯机制、解耦、设计数据层 动态设计:抽象与统一不同的因素、整理逻辑控制、设计消息通知机制 模块调整:调整模块等级、用设计模式优化设计、编码时构建适当的动态临时类、效率的优化(优化效率3步骤) 典型案例分析:总结、整理架构设计的步骤 |
大型软件系统架构实践与剖析 |
超市收款系统软件架构案例研究 网络数据钻取及分析软件架构案例研究 某政府项目软件架构案例研究 |
软件架构视图 软件架构视图的意义,软件架构师的多维思考 逻辑视图、开发视图、物理视图、运行视图、场景视图、数据视图、功能视图 如何和怎样绘制软件架构视图 UML建模工具在架构视图的应用 典型案例分析:结合多个项目实例,进行分析软件架构视图 |
架构设计中的模块划分及职责分配——GRASP原则 架构/模块设计中,如何划分模块,如何分配模块的职责是重要的内容。本节结合多个案例,回答: 如何进行架构设计,什么是好的架构,怎么验证架构的合理性? 如何进行组件(模块化)化设计,在架构基础上保证组件及框架的复用? 内容一 模块及组件的职责分配设计 分层与分区的考虑 基于面向对象的组件职责分配 组件职责分配的深入探讨 大型组件与小组件职责分配的探讨 典型案例分析:如何为模块合理地分配职责,某收款系统、税务系统的组件设计 内容二 组件创建及装载设计 组件的动态装载 组件创建者的选择原则 架构中常见的组件创建方式 典型案例分析:某数据解析系统设计,阐述构件创建的要点 内容三 如何设计出高内聚低耦合的架构 组件的粒度把握原则 不同类型的模块及其复用方式 面向过程式或面向对象组件的选择 在不同的模块中隔离不同的关注面 用单一职责原理指导架构设计 典型案例分析:某Html分析系统、某文档验证系统设计,分析高内聚低耦合的重要意义 内容四 架构设计中如何有效地组织多个组件/模块 设计控制器模块 控制模块与其它模块的交互 设计不同类型的模块在系统中的交互机制 对过大组件/模块的分解原则及实践 典型案例分析:某文档验证系统设计,阐述对系统的整体把握能力 内容五 如何设计出灵活性及可扩展性高的架构 如何设计出可扩展的架构 多态在组件设计中的使用 间接模式在架构设计中的价值及其使用 接模式在基于架构的架构中的运用 典型案例分析:UIM系统设计,如何构造灵活而可扩展的系统 内容六 架构的鲁棒性设计 1)隔离不同的关注面 2)如何封装组件设计中的变化 3)组件设计中的开-闭原则 4)包内聚原则及其运用 5)包耦合原则及其运用 典型案例分析:税务系统、演示汇报系统实例进行分析 |
架构设计过程 内容一 商业架构设计 软件功能需求对架构的影响 软件质量需求对架构的影响 软件商业质量属性分析 软件约束条件与架构的影响 确定架构目标 系统功能分解(系统、子系统、模块)和部署模式 典型案例分析:结合多个项目实例,分析质量需求、约束对架构的影响(项目错误的架构,导致反复迭代) 内容二 逻辑架构设计 软件架构立方体图 软件架构模式和架构师经验的引入 使用质量场景属性进行迭代架构设计 综合初步设计,确定高层分割(分层 分服务 分区 通信) 典型案例分析:结合项目实例,进行分析该阶段的主要任务和相关成果 内容三 物理架构设计 数据模型视图 结合逻辑架构,设计物理部署 内容四 架构重构 软件架构重构还是重写 软件架构重构技巧 软件架构复用 架构重构的4种方案及模式 |
核心业务逻辑层 架构设计 内容一 业务逻辑层中的子层设计 业务逻辑层组件设计 业务逻辑层工作流设计 服务facade设计 业务逻辑层实体设计 充血模型、贫血模型、失血模型的博弈及案例分析 分布式应用场景 业务逻辑层框架(EJB,Springframework,.Net框架) 内容二 典型案例分析 订餐系统,逻辑子层分析及设计中的要点 杂志订阅系统,需求分析到领域分析,业务逻辑层的设计要点 媒体墙系统,分析系统的组件划分及业务逻辑层划分 |
质量属性驱动 架构设计策略 什么是系统质量属性,如何进行质量属性进行驱动架构设计 架构和质量属性的关系 如何获得可维护性、可扩展性、可靠性、互操作性,系统性能,安全性等 系统架构的可靠性设计策略 系统架构的可修改性设计策略 系统架构的性能设计策略 系统架构的安全性设计策略 系统架构的易用性设计策略 系统架构质量属性和架构模式的应用 典型案例分析:架构策略如何应用在自己的实际项目中 |
设计原则及设计模式 内容一:面向对象设计原则及其分析 软件设计目标,基本原则和模式关系 开闭原则 依赖倒置原则 单一职责原则 里氏替换原则 合成/聚合复用原则 接口隔离原则和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是否真正做到了它所说的价值 这些小案例涉及项目开发中的常见的困境、疑惑,本节探讨如何通过设计原则解决。 讨论设计原则与设计模式的关系,已经在没有合适模式可用的情况下如何分析、解决问题。 |
软件架构模式 内容一 常见的架构模式/风格 分层架构模式 Pipe/Filter Pattern 黑板/看板(blackboard)模式 MVC/PVC Pattern Event-Based Pattern和Microkernel Pattern 分布式和并发架构设计模式 解释器和黑板模式 其他模式的介绍(元数据等) 典型案例分析:软件架构模式如何应用在自己的实际项目中 内容二 典型案例分析 某数据抓取分析系统 某模式识别系统 某多媒体制作系统 通过典型案例分析,总结架构师实际项目架构的经验和应用 |
设计模式与软件设计思想 内容一 常见的设计模式及其运用 使用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种数据库设计模式及数据表设计模式,分析其实用条件。 |
系统内间通信设计 系统通信设计原则 常见跨进程通讯的手段 大数据量交互的通讯手段 异构系统间常见的通讯手段 基于消息队列及控制的通讯手段 基于本地SDK的通讯手段 基于数据库的数据交换方案 服务器推技术及对现代软件的影响 协议选择对性能的考虑 同步及异步的通讯手段 典型案例分析:结合项目实例分析,系统内/间的通信设计 |
部分软件应用类型和架构风格鉴赏 基于树形结构的分布式系统 基于总控端的分布式系统 基于P2P的分布式系统 基于数据网关交互的BS系统 基于集中控制的BS系统 复杂消息控制的桌面运用系统 松散耦合的桌面系统 组件化的桌面系统 基于脚本解释器的桌面系统 其他系统,分析其优劣 典型案例分析:分析实际的项目案例,赏析系统的不同架构风格,并评说其利弊 |
架构设计步骤总结及实践 静态设计:子系统、分层及分区;职责分配 模块间的通信及耦合设计:组件式编程、考虑通讯机制、解耦、设计数据层 动态设计:抽象与统一不同的因素、整理逻辑控制、设计消息通知机制 模块调整:调整模块等级、用设计模式优化设计、编码时构建适当的动态临时类、效率的优化(优化效率3步骤) 典型案例分析:总结、整理架构设计的步骤 |
大型软件系统架构实践与剖析 超市收款系统软件架构案例研究 网络数据钻取及分析软件架构案例研究 某政府项目软件架构案例研究 |