建模练习——扇贝单词

本文针对扇贝单词的主要业务背单词进行建模,绘制一系列用例图、活动图、状态图、领域模型、系统顺序图以及操作契约。
相关业务文档

用例图

在扇贝中背单词的关键流程是:看到单词-》判断掌握程度-》根据掌握程度做不同的识记动作——这个过程可以在活动图更清楚的看到,由此可以决定图中右边几个用例的关系。特别的,几种不同的提示:例句提示中文提示等,都并作提示。
这里写图片描述

活动图

这儿活动图展示了背完一天的任务的流程:从背第一个单词开始,中间黑粗横线的汇聚出表示背完一个单词;循环重复背一个单词的过程,直到背完一个组(7个),直到背完所有。
这里写图片描述

状态图

扇贝中能够识别出两个状态发生改变的对象:单词和任务。我把任务设计为一个具有时效性(比如一天)的临时对象,临时从本地单词库中抽取一定数目的单词作为今天的任务,而不会在数据库中持久化——需要持久化的只有一些统计数据以及单词状态的改变。
新词的状态表示从未出现在之前的任务中。而剩下的三个状态对应了用户对该单词三种不同的掌握程度,在后续复习中状态之间可能转化。最终变成已掌握状态就不会再出现在新的背单词任务中了。
对于任务的状态稍微解释一下超时未完成:每天有一定量的单词需要背,如果当天没有开始背或者背了一半没背完,那么过了那天这个任务就要被认定为未完成,打卡记录上记下未完成。
这里写图片描述

领域模型

这个领域模型是最头疼的。
单词库、单词、例句好说。用户的话要仔细研究一下文档了,我把“我的单词”那部分的统计数据作为用户的属性,数据每天不断更新。
上面说的新任务作为临时对象的设计,实在画领域模型的时候确定的,新任务不仅要包含单词库中的单词项,还要有这批单词的实时计数,便于打卡记录或者超时记录时的数据更新。在做新任务背单词的过程中,可以实时更新本地单词库中的单词状态。当打卡或者任务结束时,就根据记录更新用户的几项统计数据。
这里写图片描述

打卡系统顺序图

承上所述,打卡的时候做好这两个动作就可以了。
这里写图片描述

PunchOut操作契约

A B
操作: PunchOut(Task)
交叉引用: 用例:打卡记录
前置条件: 新任务未完成单词数 == 0
后置条件: 生成一条新的打卡记录;累加用户的单词统计数据