人人都是领域专家.docx

上传人:b****5 文档编号:8330409 上传时间:2023-01-30 格式:DOCX 页数:21 大小:699KB
下载 相关 举报
人人都是领域专家.docx_第1页
第1页 / 共21页
人人都是领域专家.docx_第2页
第2页 / 共21页
人人都是领域专家.docx_第3页
第3页 / 共21页
人人都是领域专家.docx_第4页
第4页 / 共21页
人人都是领域专家.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

人人都是领域专家.docx

《人人都是领域专家.docx》由会员分享,可在线阅读,更多相关《人人都是领域专家.docx(21页珍藏版)》请在冰豆网上搜索。

人人都是领域专家.docx

人人都是领域专家

人人都是领域专家

1、人人都是领域专家-用例图

2、人人都是领域专家-活动图

3、人人都是领域专家-类图

4、人人都是领域专家-顺序图

5、人人都是领域专家-类图关系化

6、人人都是领域专家-类图关系说明

一个好的设计能使开发事半功倍,好的设计来源于好的需求。

这就需要需求分析师帮我们开发人员提供精炼,清晰,准确的需求报告。

需分将采集来的需求用UML(UnifiedModelingLanguage)描述出来,我称之为需求建模。

需求阶段建模的过程中涉及到的有用例图(usecasediagram)和活动图(activitydiagram)。

下面就对网上购物的应用进行用例建模,以此举例用例建模的过程。

当然任何事情都不能一蹴而就,用例建模也是一样。

用例建模的过程可能分好几次迭代进行,一开始粒度可能较粗,随着迭代进行而逐渐精化。

所以不需要一开始就妄想考虑的面面俱到。

 

1、网上购物的需求描述非常简单:

无非就是用户在一个购物网站上购买商品。

用用例图描述如下,有一个参与者和一个用例。

非常简单,目标明确。

 2、然后自评一下,觉得购买商品这个用例粒度太粗了,还有细化分解的可能。

于是就将该用例分解。

这个过程需要和客户更好的沟通。

 3、用例分解以后,新的用例粒度更细,权责也更明确了。

但是客户反映有些用例是购买商品的必选步骤,有些则不是。

这时如何在用例图上体现这个关系呢?

我们可以利用include和extend概念来描述,include描述的是主用例和次用例之间的包含关系即必选关系,extend描述的是可选关系。

include关系箭头是主用例指向次用例,extend关系箭头是次用例指向主用例。

4、随着迭代的推进,发现有些用例可以有多种实现方式,不同的实现方式可能有不同的活动图和顺序图。

故在用例图上使用泛化关系描述之。

泛化关系使用一个空心的箭头,可以把它想象成继承关系。

5、用例精化的差不多了,还有别的参与者吗?

用户提醒我们说,除了普通会员可以购买商品以外,还有一类Vip会员可以以折扣价购买一些特价商品。

so,用例需要添加新的参与者和新的用例。

6、从上图可以看出,Vip会员就是特殊化的普通会员。

然后,我们也可以对参与者泛化。

但是参与者泛化会带来一些理解上的复杂性。

可以的话,一般不推荐使用。

 7、在重新审视需求,和客户充分沟通以后,本着简单,清晰有效,且不引起歧义的宗旨,我们重新修订整个用例,得到结果如下。

当然这可能还没完,可能还有进一步挖掘需求和用例精化的空间。

可以在保证进度前提下继续迭代建模。

在建模的世界里,没有最好,只有更好。

 

 

 需求阶段用例图完成以后,需要进一步描述用例。

由于每一个用例可能对应几个事件流,单从用例不能获取有效的信息。

这时候就要用到活动图了。

活动图专门用来描述用例的事件流。

 

我们借用上一节其中一次迭代的用例图做例子,寻找商品用例,泛化成两个子用例,这两个用例不能合并的主要原因就是事件流不同。

我们以“通过搜索引擎寻找商品”用例为例,使用活动图描述其事件流。

 

活动图的描述可以参考以前完成的用例文档,一般的用例文档的格式如下:

 

用例名称:

通过搜索引擎寻找商品

描述:

(...)

前置条件:

(...)

部署约束:

(...)

正常事件流:

(...)

可选事件流:

(...)

异常事件流:

(...)

非功能性需求:

(...)

说明(可选):

(...)

未解决的问题(可选):

(...)

 

每一个用例文档都有描述三种事件流:

正常事件流、可选事件流、异常事件流。

除了正常事件流以外,可选和异常都是可选的。

 

根据用例文档对事件流的描述,我们可以作出活动图。

“通过搜索引擎寻找商品”用例的活动图如下(用例文档省略):

 其他用例也可以使用类似方式作出活动图。

这里就不再赘述。

 

经过了领域专家的辛勤劳作,我们终于得到了精准的需求文档、形象的用例图和每个用例的活动图。

接下来轮到架构师出场,开始轰轰烈烈的分析阶段。

分析阶段最主要的产出是类图和顺序图。

 

为了简化问题,我们使用最后一次迭代的产出用例图(没有将用例进一步精化)。

 

如果使用敏捷迭代开发,一开始分析阶段倾向于选择风险最大的用例优先开发,这个风险的评估在架构人员拿到用例文档以后就可以开始了。

在这个例子里,我们倾向于选择“购买商品”为风险最大用例,“登录”用例次之。

so,接下来的分析阶段,我们只关注“登录”和“购买商品”这两个用例。

 

接下来分析这个用例图所有的参与者和用例,将实体识别出来添加到类图中。

这往往是画类图的第一步,也是较简单的部分。

既然UML主要用于面向对象语言建模,领域中的实体就是对应着语言里的对象。

 

我们分析过程如下:

∙参与者是很明显的实体,因此会员,vip会员都是实体;

∙购买商品用例明显涉及到商品实体;

∙要购买商品肯定会生成一个订单实体;

∙支付时还要涉及到账户实体;

先想到这么多,深入分析的话会发现用例中其实还有其他实体,但是,按照敏捷的思想,我们在第一个迭代中不用求全责备。

况且,这个教程是用来说明方法过程,力求简单,并没有强求模型的完整性。

 

 

UML类图的最佳实践里包含三种久经考验的类类型:

∙实体类(entity)

∙控制类(control)

∙边界类(boundary)

 

当然这只是模型意义上的类型,和语言的类没有关系。

实体类我们已经了解了,边界类是用户和控制类的媒介也就是用户接口,控制类是边界类和实体类的媒介。

OK,其实就是分层的概念了好吧。

你可以理解成MVC差不多。

 

一个用例就可以抽取成为一个控制类,命名的方式可以是用例名+后缀。

比如登录用例名是Login,我们可以用LoginWorkflow来描述登录控制类。

后缀名可以任意取,比如Workflow,Controller,Service等等都可以,但至少在一个模型中要一致。

 

边界类也是如此,比如商品购买用例,我们采用用例名PurchaseStuffs+后缀的方式,后缀可以选择采用UI、View等等。

我们暂时只对登录和商品购买这两个用例进行建模。

得到的类图如下。

 

类中的方法和属性可以在以后迭代中逐步补完。

在这里先列出一些比较有可能用到的方法,属性可以慢慢来。

 

类图的改进和细化

 

到现在我们在类图上罗列了一堆游离的类,我们可以在已知的条件下改进这个类图比如说Member类和VIPMember类可以抽离出一个共有的接口或有默认实现的父类等等。

这个类图的改进还包括描述清楚类之间的关系。

先别急着加,我们可以等画顺序图的时候再来考虑类间的关系。

 

 

 

/**

* 转载请注明作者longdick  

*

*/

相关帖子:

1、人人都是领域专家-用例图

2、人人都是领域专家-活动图

3、人人都是领域专家-类图

4、人人都是领域专家-顺序图

5、人人都是领域专家-类图关系化

6、人人都是领域专家-类图关系说明

 

在分析阶段顺序图(SequenceDiagram)用来描述活动图里的单一事件流。

也就是说每个用例对应一个活动图,一个活动图对应一个以上的顺序图。

顺序图是交互图(interactiondiagram)的一种。

另一种交互图是协作图(CollaborationDiagram)。

 

第一次迭代我们只关注风险最大的两个用例“购买商品”和“登录”。

 

有了类图做铺垫,对照着用例的活动图,我们可以轻松的画出顺序图。

下图是登录用例的正常事件流顺序图。

 

你可以看到顺序图的类顺序排列符合一般架构的分层原则:

参与者--边界类--控制类--实体类。

但是这里有个问题,就是控制类LoginWorkflow怎么定位实体类Customer呢,当然不能凭空变出来,从顺序图推导出可能需要引入辅助类协助LoginWorkflow定位Customer。

 

这时候我们就需要增加一个实体类定位器,这种构造型称为LifeCycle的类可以以实体类名+后缀的形式命名,后缀名可以是Factory,Locator,Handler等等,在一个模型里保持一致即可。

我们将其命名为CustomerLocator,提供findByName方法来定位Customer,so,LoginWorkflow只需要持有一个对CustomerLocator的引用就可以了。

 

修改后的顺序图如下:

刚才已经说过了,顺序图对应活动图的每个事件流,除了正常事件流,可能还需要描述可选和异常事件流。

下图就是登录用例的可选事件流示例,除了个别细节不同,大体上是很类似的。

 然后就到了购买商品的用例了,购买商品用例流程比较复杂,为了说明方便,对其做了精简,精简后的购买商品活动图如下:

 

这个购买商品的活动图有两个事件流,从活动图我们可以清晰的推出涉及到的实体:

商品、账户、订单和顾客。

顺序图可以说是水到渠成。

在作顺序图的时侯很适合做类的关联,可以在这个时候好好想想各个实体之间的关系、控制类对实体的直接引用还是使用辅助类间接引用等等。

当然有些人喜欢在画类图时就考虑类之间的关系也没有问题,我只是建议,不是要求。

基于同样的原因,我们增加了一个StuffLocator的LifeCycle类。

购买商品的正常事件流如下:

 

 

OK,如果项目时间还宽裕的话,把每个可选和异常事件流都加上。

 

 

/**

* 转载请注明作者longdick  

*

*/

相关帖子:

1、人人都是领域专家-用例图

2、人人都是领域专家-活动图

3、人人都是领域专家-类图

4、人人都是领域专家-顺序图

5、人人都是领域专家-类图关系化

6、人人都是领域专家-类图关系说明

 

经过上一轮的顺序图的pk,我们发现需要在模型中添加两个辅助类:

CustomerLocator和StuffLocator,现在回来在类图里添加上这两个类。

这时候可以重新审视这张类图,也许有些类回过头来看觉得没有必要,就可以删掉。

比如VIPMember类,你想在Member类加个属性来区别是否是VIP也可以啊,这个可以经过讨论得出结论。

现在,接下来的工作就很Happy了,我们将顺序图中类的关系添加到类图里。

可以一个用例一个用例的来,别急着一股脑全上。

下图就是Login用例的类关系图。

下图是购买商品用例的类关系图

 分析阶段建模的第一次迭代差不多到尾声,项目时间允许范围内还需要做几次迭代,最后的模型会和现在的大相径庭也不是没有可能。

只要掌握方法,细心加上耐心,一定可以作出优秀的领域模型来。

 

 

**

* 转载请注明作者longdick  

*

*/

相关帖子:

1、人人都是领域专家-用例图

2、人人都是领域专家-活动图

3、人人都是领域专家-类图

4、人人都是领域专家-顺序图

5、人人都是领域专家-类图关系化

6、人人都是领域专家-类图关系说明

 

classdiagram里的四种关系DAAC,如图所示:

Dependency(依赖)

Association(关联)

Aggregation(聚合)

Composition(组合)

关联的紧密程度如下:

依赖<关联<聚合<组合

依赖:

短期联系,可能是作为方法的参数

或者在方法中创建,用完就丢掉了。

关联:

长期联系,可能是作为一个域存在

聚合:

一个整体包含另一个对象。

被包含

对象可能会参与多个聚合关系,例如Person

可以属于ProjectTeamA,也可能同属于

ProjectTeamB。

被包含对象相对独立。

组合:

一个整体拥有另一个对象。

被包含对象不能脱离整体而存在。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1