致力于提升研发企业的持续创新能力

结盟众多企业“教练”, 共同设计、开发及提供人才培养解决方案,通过新颖多样的学习方式,针对性的定制化内容,助力企业全面提升竞争优势。

课程分类列表

软件设计模式
课程类别:软件架构

设计模式 UML 软件设计

课程讲师:

Bruce Zhang

课程周期:

2天

课程费用:

5200元

课程亮点:

1、全真案例,借助案例与设计模式知识的原理,借助最佳实践,帮助您提高设计能力,从而提高开发效率和设计质量

2、以新视角,揭示模式的本质、思想方法,剖析出模式之“道”,跳出“为模式而模式”的“陷阱”

3、提升设计能力,使开发人员由“编程小工”到设计专家

4、提出场景驱动设计,利用领域建模、职责驱动、扩展式设计以及重构,提高软件设计质量,实现卓越软件设计

5、关注业界内设计模式,以实战训练驱动对面向对象设计的理解与运用

 

在课程中要逐一解决的问题:

1、员工无法接手遗留系统,原因是代码杂乱,可读性差

2、团队成员没有设计模式知识与经验,无法实施敏捷开发

3、系统难以重构,不利于产品的重用与二次开发

4、开发效率得不到保障,因为详细设计人员不能理解架构文档与详细设计方案

5、设计方案难于应对需求变更

6、设计的系统架构缺乏可扩展性、可维护性和可测试性,不能合理地重用

7、架构、设计、开发三个环节中各个角色不能理解设计意图,很难沟通


课程大纲:

主题 内容
卓越软件设计的特征 1、体现简单之美的设计方案
2、可重用的对象与组件
3、支持良好的可扩展性
4、充分的测试覆盖率
5、可读性高的代码;
6、案例:分析邮件服务器代码暴露的问题,在可重用性、代码可维护性、可扩展性等诸多方面着手,剖析代码坏味道。
面向对象的设计要素 1、合理封装的要点
分析EISaaS项目中参数元数据处理的代码,体现合理封装的重要性,并通过示范重构手法改善代码的质量;
2、继承与委派的区别
分析继承与委派各自的优缺点,说明在何种场景下选择继承和委派。通过分析JDBC DBDriver的设计,进一步了解继承与委派的区别。
3、多态与抽象
解释抽象与多态的本质,分析在何种情况下应该使用多态;
分析TrainRoute代码,了解代码在需求扩展方面的不足,并通过示范重构的手法改进设计;
UML简述 1、UML在面向对象设计中的作用
2、常用的UML图,包括用例图、类图、时序图、状态图、活动图与组件图
3、案例分析:休假跟踪系统的设计,介绍如何运用UML对系统进行设计
面向对象设计核心的SOLID原则 1、单一职责原则(SRP):该原则是合理封装对象,分配职责的重要原则;
2、开放封闭原则(OCP):该原则体现了扩展式开发的核心思想;
3、Liskov替换原则(LSP):可以将该原则视为是对是否正确运用继承的检验标准;
4、接口隔离原则(ISP):对于接口的粒度进行规划,以便于设计出更好的接口;
5、依赖倒置原则(DCP):对于依赖和解耦的分析,利用抽象保证设计的可扩展性;
案例分析:数据引擎的设计
JUnit框架分析 通过全面剖析JUnit测试框架,了解大师的设计艺术,展现JUnit是如何保证框架的简单、可扩展、可重用。内容包括:
1、JUnit的组件结构
2、JUnit的Test Case设计
3、如何支持Test Result显示的扩展
4、JUnit中如何通过复杂的设计来简化用户的使用
职责驱动设计 1、职责的层次
包括职责层次的识别、职责层次与软件架构层次之间的关系、职责与概念、规约与实现
2、案例分析: 再次对邮件服务器进行分析,通过分辨职责层次,来改善设计。并提出需求变更,从而引入对观察者模式、策略模式、简单工厂模式、调停者模式与职责链模式的对比与分析;
3、实战演练:设计一个作业调度框架,它能够根据指定的时间触发作业,执行自定义任务。
4、对象的角色
角色、职责与协作是三位一体的关系,角色是发起职责的对象,职责则应该是对象之间的协作。不同角色的对象,履行的职责是不同的。对象的角色包括:信息持有者、构造者、服务提供者、协调者、控制者。
案例分析:
处理HTTP请求与应答,体现信息持有者角色;
JMS对Queue的创建体现构造者角色;
税务报告的生成体现服务提供者角色;
服务定位器体现协调者角色;
内容验证器体现控制者角色;
5、模块级的职责分配
如何根据职责对模块进行分解,了解高内聚、松耦合原则。通过实际案例分析错误的职责分配,解决循环依赖问题,遵循包的复用原则;
案例分析:分析eBay的架构;根据对某大型系统架构的演进,提出模块重用的方式;
职责分配遵循的原则与模式 1、再次分析单一职责原则:分析该原则的核心思想,关注对象的变化点;
案例分析:功能引擎中对功能对象的加载,如何体现职责分离带来的好处;通过对案例分析引入Proxy模式;
2、专家模式:专家模式的核心思想是信息的持有者是操作该信息的专家;
案例分析:对JBehave编写的系统进行分析,运用专家模式识别代码存在的问题,利用前面提到的重构手法改进设计;
3、自治对象:分析了自治对象的特征,分别包括:最小完备,稳定空间,自我履行与独立进化。
案例分析:用户状态机,给出了报税系统中复杂的用户状态迁移,体现的复杂授权、登录等业务逻辑,并由此引入State模式来简化设计,体现自治对象的特征。
软件的可重用性 1、分析出现重复代码的原因
2、设计应遵循DRY原则,以避免重复
3、保证对象乃至组件的合理粒度,并关注对象之间的解耦
4、从方法级避免代码的重复
5、通过提取共性特征从类级避免代码重复
6、利用用例来识别可能重复的功能
7、模块或组件级别的重用
8、利用微服务实现服务级别的重用
9、案例分析:权限管理系统的设计、日志系统的设计、大型金融系统的模块分解与重用、使用Dropwizard设计微服务
应用框架设计 1、应用框架概述
2、确定应用框架的目标
3、应用框架API的设计
4、对框架整体架构的思考与设计
5、案例分析:自行设计的轻量级IoC容器Melt
如何应对需求的变化 1、抽象的关键在于寻找多个对象(或行为)具有的共同特征,并对特性进行泛化。
案例分析:项目管理模型的抽象,通过对多种项目管理过程进行分析,对各种模型概念进行分类,并抽象出模型的共同特征,从而简化模型;
2、识别变化点,对变化进行封装。常见的变化点包括业务规则、算法策略、外部服务、硬件支持、命令请求、协议标准、数据格式、业务流程、系统配置、界面表现;
案例分析:电子商务系统的票据业务规则,引入规格模式;CIMS系统的机器加载策略,引入策略模式;短信服务,引入外观模式与适配器模式;人力资源系统考勤模块,介绍入口模式;
3、解耦具体依赖
介绍常见的解除具体依赖的方法,包括表驱动法、配置与反射、IoC容器、惯例优于配置。
扩展式设计 1、扩展式设计的过程
扩展式设计分为三个步骤,分别为:分离职责各司其职,利用抽象统一接口,引用接口预留空白。扩展式设计可以有效地保证整个系统的可扩展性。
2、实战演练:订单处理,通过三次迭代逐步改进原有设计,并分别遵循专家模式、分离原则与扩展式设计,保证设计在修改最小的前提下满足需求变化。在设计演进中,讨论对设计模式的合理运用,并引入规格模式;
3、案例分析:配置管理框架的设计,该框架能够支持配置信息的多种存储形态,包括文件、数据库、LDAP等;支持多种获取配置的方式,如Web服务,REST服务。配置管理框架的接口需要保证其统一性和一致性,同时在满足可扩展要求下,提供接口的易用性。
4、案例分析:消息队列规范的设计。通过分析JMS、MSMQ、RabbitMQ和NServiceBus的设计,理解抽象的含义,例如理解面向接口设计、接口隔离原则、按意图设计、外观模式与企业集成模式。
5、实战演练:CIMS基于消息的分布式架构。通过对服务的统一抽象,以及对消息处理的职责分配,建立一个协作合理的分布式架构。设计过程中会引入命令模式、发布者-订阅者模式、消息总线模式、消息转换器模式、查询模式。
场景驱动设计概述 1、场景的目标层次
(1)概要目标:系统层次的场景划分,每个概要目标可对应子系统的需求目标。通过概要目标引入领域驱动设计的Unbounded Context。
(2)用户目标:业务层次的场景划分,每个用户目标对应各个子系统所提供的业务价值,并以服务的形式暴露给调用者。
(3)子功能:功能层次的场景划分,每个子功能都对应于业务功能,并以领域对象或横切关注点的方式,由服务调用。
(4)案例分析:电子商务系统的场景目标划分,以层次模型的方式表现场景。
2、场景的6W模型
(1)6W的内容:分别为who(对应于角色)、why(对应于业务价值)、when(对应于对象的协作)、what(对应于业务功能)、where(对应于场景边界)和hoW(对应于业务实现);
(2)6W模型的设计驱动力:6W模型的关键是在场景边界内,通过场景识别出角色,再以角色为设计入口,运用职责的层次模型识别出业务价值、业务功能和业务实现,从而根据职责模型获得领域模型,再通过时序图,处理对象之间的协作关系,进一步精炼出更为准确的领域模型。
场景驱动设计过程与实战 1、场景驱动设计与风险识别的关系
2、场景驱动设计对职责分配与扩展设计的要求
3、场景驱动设计的过程
4、场景驱动设计演练:
民航通信码识别系统:运用场景驱动设计的过程对该系统进行设计,其中会用到领域驱动设计中的建模方法,并通过识别坏味道,运用之前讲到的重构手法对设计进行改善。
找到所需课程了吗?即刻 填写申请表格 与我们联络吧