用例分析看起来很简单,但这个问题暴露了一些内在的复杂性。
每个用例必须对参与者有意义,即它必须代表与系统进行明确定义的交互。每个参与者和用例在谈论系统时也必须有意义,甚至可以使用日常语言。如果你发现定义参与者或用例很困难,那么可能系统上下文不清晰,因此领域模型可能会有所帮助。
用例必须代表一个明确定义的交互,但不一定是完整的交互。在需要同时查看完整和部分交互用例的情况下,可以使用“包含”关系。例如,您可以考虑让用例“购买商品”包括“浏览产品”,“将商品添加到购物车”和“结账<>取消”,每个都对客户有意义。
(我有点困惑您的系统是面向实体还是在线交易;拥有收银机和打印的收据似乎暗示前者,在分析中使用的概念中的购物车则暗示后者。以上假设为在线系统。)
然而,在您的情况下,您正在谈论可能被视为系统本身一部分的参与者。这通常意味着您试图同时定义系统及其子系统,这在您开始分析之前已经形成了(最终的)系统设计的情况下很常见。
然后,您需要将分析分为两个级别。在上层(系统)级别上,非常严格地处理整个系统。在您的情况下,您可能需要参与者“客户”,“支付伙伴”,“职员”(对于实体交易系统),“会计师”(以及可能是“管理员”),以及如上所述的用例加上“更新产品目录”,“审计销售日志”等。
然后,您将系统分解为子系统,并为每个子系统进行单独的分析。这里,子系统可以是彼此的用例中的参与者。例如,“打印收据”本身不是系统级别的有意义的用例,因为它本身不是系统作为一个整体和系统级别参与者之间的交互,但对于打印机子系统来说,它是有意义的,以收银机为参与者。
在开始子系统分解之前,您无需完成系统级别分析,事实上我认为最好同时启动它们 - 尽管这要求分析/设计人员能够快速切换上下文,并且在任何给定时间都要有纪律地工作在哪个上下文中。
所以,在所有这些之后(呼!),我认为您问题的答案是:
- 两者都可以,只要每个使用案例对其参与者具有良好定义的(但不一定完整)系统交互意义即可。
- 可以,但不是在同一级别上;如果为系统创建一个模型,并为每个子系统创建单独的模型,则可以将子系统用作彼此使用案例中的参与者。