是不是直接写“发红包”而不是“请求微信发红包”
jeri 2022-6-29 9:54
这里是不是直接写“发红包”而不是“请求微信发红包”?业务序列图时,箭头表示A请求B, 分析序列图是否也有这个意思?
UMLChina潘加宇
道理“A请求B做某事”是一样的,你自己理一理。
控制类 请求 微信接口 请求微信发红包,边界类的责任就是“请求微信发红包”而不是“发红包”,“发红包”是微信系统的责任。
或者说,我们要流血流汗为边界类写的是“请求微信发红包”的代码,而不是“发红包”的代码。
类似于
老板 请求(命令) 会计 请求税务局办理手续,会计的责任只是去“请求税务局办理手续”
序列图消息上的很多“请求”是多余的废话,那是因为对应的“做某事”很多时候不是“请求****”。
以下是本问题的展开:
问题中有疑惑,分析序列图是否有什么区别?上面讲了,“A请求B做某事”这个道理是一样的,但这个“做某事”之所以是“请求****”,确实和分析序列图有关,因为我们把系统分解了,其中有一个边界类,专门负责封装“请求微信发红包”的责任。
下面这个可以:
如果我们不分解目标系统,就变成:
可能有的同学会下意识反应,咦?“请求A系统做某事”哪里去了,是不是跑前面去了,像这样:
如果有这样的反应,那就要警惕了。我经常批评的各种“DDD创新”吃什么拉什么、一一对应、废话连篇刷工作量就是这样的思想导致的。
指向目标系统的消息是该系统为其他系统提供的服务(用例),例如“下单”、“叫车”。目标系统里面怎么分解的,是不是分了几个类,到底有没有一个类专门负责“请求A系统做某事”,这就不知道了。
当然,如果目标系统的价值确实就是给A系统当一层外皮,那么指向它的消息写“请求A系统做某事”就是合适的。