作业单打印和发放的责任分配

刘京城 2020-7-4 18:19

1168.png
1169.png

潘老师,有个批量操作的问题我想不太清楚,想请教一下。用户在打印作业单时通常都是一次批量打印的。分析阶段不考虑时间与空间因素,所以在类图上我画的打印事件与作业单是一对多关系(一次打印多个作业单)。在彩色建模画分析序列图的套路中,单个作业单收到领域事件“打印”,请求“部件”执行打印规则,然后作业单创建“打印”对象(保存),最后作业单自己改变状态。循环这一过程直到所有作业单打印完成。但这样一来,每个作业单都创建了一个打印对象,与我画的类图一对多关系矛盾了。假设类图是对的,那序列图中的“打印”对象由作业单来创建是否就不合适了?如果是那该由谁来创建呢?如果是控制类,我记得它只分配责任不具体执行的。假如序列图是对的,那作业单与打印就是一对一关系,这与实际情况在理解上感觉又有点矛盾

UMLChina潘加宇

“打印”其实就是“输出”的一种,和“显示在显示器”,“反馈给远程调用者”无本质区别。

打印应该是边界的责任,不是作业单的责任,作业单提供打印视图所需的数据

你把“用户选择若干作业单请求打印”换成“用户选择若干作业单请求原样显示给另一个用户”,该是怎样就是怎样。

刘京城 2020-7-7 21:35

1170.png
1171.png

上个问题可能是我弄巧成拙了,因为怕作业单发放的业务不太好理解,所用了“打印”这个业务来替代。实际我现在做的是作业单发放用例的分析工作,我再重新描述下问题:用户在发放作业单时通常都是一次批量发放的。分析阶段不考虑时间与空间因素,所以在类图上我画的发放事件与作业单是一对多关系(一次发放多个作业单)。在彩色建模画分析序列图的套路中,单个作业单收到领域事件“发放”,请求“部件”执行发放规则,然后作业单创建“发放”对象(保存),最后作业单自己改变状态(改成生产中)。循环这一过程直到所有作业单发放完成。但这样一来,每个作业单都创建了一个发放对象,与我画的类图一对多关系矛盾了。假设类图是对的,那序列图中的“发放”对象由作业单来创建是否就不合适了?如果是,那该由谁来创建呢?如果是控制类,我记得它只分配责任不具体执行的。假如序列图是对的,那作业单与发放就是一对一关系,这与实际情况在理解上感觉又有点矛盾

UMLChina潘加宇

如果有矛盾,可能是领域内涵没有体会透彻。

你都说了,选一批作业单批量发放,说明“发放”是针对“作业单批次”,而不是作业单。当然,允许有的批次只有一份作业单。如果最终确定不关心“作业单批次”的细节,把这个类删掉,就得到了你给出的类图。

---扩展开来说---

如果认为“发放”是针对“作业单”,那么,每个“作业单”单独有自己的“发放”对象就是正确的。

不能由于“发放”的某些属性(时间,操作人)一样----注意:是某些,不是所有,所关联到的作业单就不一样嘛,就认为是同一个“发放”。

我举个例子,同一时间(精确到秒内)同一城市有很多人出生,能不能认为这些人的“出生”对象是同一个呢?

刘京城 2020-7-9 14:28

有道理!我理解了!可能我当时是卡在一个点上,就是分析阶段不考虑时间和空间因素,就认为同时发放的作业单就是在同一极限时间一起发的,然后就认为“发放”事件只发生了一次,所以觉得只有一个“发放”。人出生的例子很贴切!现在我理解了,谢谢潘老师!

UMLChina潘加宇

下半部是扩展,上半部才是我认为更合适的答案

刘京城 2020-7-9 14:37

额,目前来说,可能没有“作业单批次”的概念(可能就是选一批一起发放,并没有特定规则区分出哪些批次,只要能发放的都可以一起发,就是个省时省力的批量操作,后面到产线后都是各自走的),实际也不关心“作业单批次”的细节。我想发放还是针对作业单本身的,所以感觉扩展的部分更符合实际


weixinpanjiayu2