Thinking in UML(二)

💡 原文中文,约7300字,阅读约需18分钟。
📝

内容提要

本文是《Thinking in UML》实践篇,介绍从可行性分析到实现的项目全过程:先了解问题领域、整理业务目标并识别业主、业务提出者、管理者、执行者、第三方、承建方、法规和用户等涉众,形成涉众分析报告;再规划业务范围与需求层次,划分优先级并制定调研计划;随后进行需求获取、系统分析与设计,区分软件架构(逻辑蓝图)与框架(半成品实现),强调接口设计、包设计和数据库设计,并讨论用例驱动与领域驱动的差异及建模抽象层次。

🔎

延伸解读

涉众分析:先分清“谁”再谈“要什么”

文章把涉众拆成业主、业务提出者、管理者、执行者、第三方、承建方、法规和用户,并强调涉众分析报告应描述涉众及其期望,而不是过早进入业务细节。这提示读者:需求混乱往往源于角色混淆,尤其“涉众不一定是用户”。先按角色记录职责与成功标准,再规划期望,能减少后续范围蔓延。

架构与框架:蓝图和半成品的区别

文章明确区分软件架构与框架:架构是逻辑蓝图,负责划分职责并用约定接口组合;框架是架构的一种实现,是可执行的半成品。以 J2EE 与 WebSphere、MVC 与 Struts 为例,说明同一架构可有不同实现。读者应避免把选型框架等同于完成架构设计,接口与职责划分才是更上游的工作。

用例驱动还是领域驱动:取决于项目处境

文章对比两种驱动方式:用例驱动由外而内,更实用;领域驱动由内而外,要求资深领域专家,更有价值但带理想主义色彩。作者建议,若仍以项目为中心运营,实际项目宜采用用例驱动;若想走向行业领导者,可分离实施项目与产品研发,用项目积累业务知识,再转化为领域模型。

数据库设计:在对象与关系之间权衡

文章指出面向对象与关系模型时间观不同,并给出实践顺序:先用纯对象模型实现业务需求,再定义持久化对象及映射,最后按非功能性能要求改进数据库设计。关联、聚合、组合的映射策略不同,依赖关系通常无需持久化。性能要求极高时可牺牲面向对象特性,说明设计取舍应服务于实际约束而非教条。

❓

Q&A

在UML项目准备阶段,如何发现和定义涉众?涉众主要分为哪几类?

涉众是与要建设的业务系统相关的一切人和事。发现和定义涉众时,需要识别以下类别:业主(出资方、投资者)、业务提出者(业务范围、模式和规则的制定者,如CEO、高级经理)、业务管理者(中层干部,负责实施和监督)、业务执行者(底层操作人员,直接与系统交互最多)、第三方(与业务相关但非业务方,如网上银行支付)、承建方(你的老板)、相关的法律法规(国家和地方法律法规、行业规范标准)以及用户(预期的系统使用者)。

涉众分析报告包含哪些内容?各部分的作用是什么?

涉众分析报告包括五个部分:涉众概要(为每个涉众编号,说明基本信息和在系统中的角色,重点描述涉众情况及对系统期望)、涉众简档(描述涉众在系统中的职责和成功标准)、用户概要(说明代表涉众使用系统的用户,用户是计算机的预期操作人员)、用户简档(描述典型用户代表的信息,对系统建设者有指导意义)、消费者统计(说明预期使用人群的特点、使用频率和方式、普遍期望)。

在规划业务范围时,如何对涉众期望划分优先级?

可以为涉众和涉众期望分别用数字划分优先级:最高优先级数值3,普通优先级数值2,最低优先级数值1。然后用涉众优先级与期望优先级相乘的结果来排序,从而确定哪些期望优先处理。

软件架构和软件框架有什么区别?请举例说明。

软件架构是一种思想,一个系统蓝图,是对软件结构组成的规划和职责设定,是逻辑构成。软件框架是软件架构的一种实现,是一个半成品,是可执行的,通常针对架构中某一特定问题提供解决方案和辅助工具。例如,IBM的Websphere(框架)是遵循J2EE架构的实现;MVC是设计思想,将应用划分为实体、控制和视图三个逻辑部件,Struts是实现该架构并提供半成品的框架。

用例驱动和领域驱动有什么差异?在实际项目中应该如何选择?

用例驱动是由外而内、先招式后内功的思想;领域驱动是由内而外、先内功后招式的思想,要求团队有资深业务领域专家,找出反映业务本质的事物、规则和结构并抽象化。领域驱动更有价值,用例驱动更为实用。建议:如果无法摆脱以项目为中心的运营模式,应采用用例驱动;如果暂时无法达到行业深度又想往行业领导者发展,应建立研发中心,分离实施项目与产品研发;如果行业深耕多年、有深厚业务知识背景,可以建立领域模型驱动的方法实施项目。

在面向对象方法中,数据库设计的最佳实践是什么?OR-Mapping的作用是什么?

最佳实践:首先采用面向对象方法分析和设计系统,用纯对象模型实现业务需求,无需考虑数据库设计;业务需求实现后,定义需要持久化的对象并建立数据模型,描述对象模型到关系模型的映射关系;根据非功能性需求针对数据存取性能要求改进数据库设计;针对特殊需求进行特殊的数据库设计。OR-Mapping的作用是转换对象关系与实体关系,负责将对象存储、更新、删除到关系型数据库,或从数据库查询数据并转换为对象,隔离面向对象与关系型数据库的差异,承担翻译者和转换者的角色,例如Hibernate、ibatis。

🏷️

标签

➡️

继续阅读