4

我对在哪里描述我可能在应用程序的某些部分中使用的算法感到有点困惑。

假设我想创建一个Use Case描述User输入一组值的方式,并且我的应用程序返回这些值的平均值(当然,这是一个非常简单的情况,但这样更容易解释)。

1. The User tells the System he wants to calculate the average of a set of numbers.
2. The System asks the User for a number.
3. The User tells the System a number.
Repeat steps 2-3 until the User tells the System there are no more numbers left.
4. The System returns the average of all those numbers.

现在,我应该在哪里说明计算数字平均值的算法?

如果我不得不更改游戏的配置、进入下一个级别、在给定一组条件的情况下将用户添加到数据库等,而不是计算数字的平均值,该怎么办?

我觉得我需要以某种方式将我对该领域的知识形式化,否则我可能会忘记它,或者更糟糕的是,假设我知道只有写下来才能理解的事情。

在其他线程,主题中,有人谈到了业务规则。从我读过的内容来看,它们似乎是作为类图上的小注释。也许我错了?如果这就是它们,我发现它们太麻烦了,无法用于更复杂的算法。

谢谢

4

3 回答 3

3

如果你真的想坚持使用用例,你会从系统的功能角度而不是最终用户的角度来编写。也许是这样的:

  1. 系统启动并将其总数和计数变量清零。
  2. 系统收到一个号码。
  3. 它将数字添加到总数中并增加计数。
  4. 重复步骤 2 和 3,直到系统被告知停止。
  5. 当被告知停止时,系统将总数除以计数并返回结果。

阅读 Alastair Cockburns 的优秀著作《编写有效用例》。它解释了具有不同级别的用例。您的初始示例将被视为用户目标(或蓝色)用例,而上述步骤将成为子功能(或 Indigo)用例的一部分(它非常简单,甚至可能被归类为黑色用例并刚刚合并进入其父级)。

正如其他人肯定会说的那样,有时用例并不是描述算法的最佳方式,您应该回退到好的旧流程图、状态图、序列图或其他任何东西。这些工具是为您的利益而存在的——当它对您不起作用时,不要被强制使用特定方法所限制。

编辑

@devoured elysium:作为对您的评论的回应,我在下面添加了一些注释:

当您识别域对象时,有时您需要考虑未写入的对象。这一切都取决于它是如何编写的。所以,在你给出的例子中,也许“系统”是一个“计算器”,用于将数字相加的变量是一个“累加器”,也许有一个接收数字的“队列”。如果数字本身可以具有不同的行为,例如范围验证或输入语法检查,则可能是数字本身是“数字”类型的对象。是否有需要考虑的“显示”对象?

这取决于您认为在您正在处理的有界上下文中的内容。也许,从用户的角度来看,有一个上下文只处理“计算器”,但系统的观点还有另一个与“累加器”、“ALU”、“位”、“单词”、“寄存器”、“时钟”、“锁存器”等。通过询问“如何?”在用例层次结构中走得越远。语言将变得越技术化。你需要决定哪些是领域对象,哪些只是实现对象,这在很大程度上取决于你试图描述和构建的事物的类型(在很大程度上,你的受众是谁——无处不在的语言等等!)。反过来,你可以通过问“为什么?”来增加堆栈。该功能正在执行。

子功能用例的主要参与者通常与调用它的高级用例的参与者相同。但是,对于某些“技术”用例,主要参与者将是系统组件/子系统。例如,系统消息记录用例可能将调用子系统作为主要参与者 - 即有意愿/需要启动操作的实体,而不是执行导致该子系统需要记录的任务的参与者某物。

在这个例子中,算法非常简单,我可能只是将它嵌入到主用例中。但是,如果它在多个其他更高级别的用例中使用,我会将其设为独立的,这样我就可以将它包含在其他文档中。只是一种功能分解方法。

这没有硬性规定。这是一种工作方式,你会随着时间的推移而发展。正如其他人所说,请确保您熟悉其他形式的图表,以便您可以为工作选择正确的工具。请记住,虽然一张图片可能值一千个单词,但有时您实际上也需要这些单词,所以不要仅仅依赖图表。

于 2010-07-16T23:23:51.317 回答
1

你在滥用用例:用例是一个静态视图:)

对于动态视图,您应该使用活动图或对象图/序列图。

于 2010-07-17T04:51:37.397 回答
1

我有一个与算法无关的系统建模复杂问题,我解决了在模型中添加约束的问题。我不知道它是否有帮助,但在我看来,您可以使用与我相同的技巧。我的意思是在图表中添加模型信息并使用多个图表来获得多个用例视图。

这个多图视图和用例保持它自己的属性真的很酷,因为一旦我的用例被保存在模型中,它就可以用于另一个图中,因此可以描述在特定图中不可能的事情。非常非常强大的概念,使用元模型作为 xmi 数据库和 UML 编辑器作为模型的查看器,而不是模型本身。我现在可以做以前不可能的事情,而且功能更强大。它也更复杂,因为您应该查看图表级别以及元模型级别,但是一旦我习惯了它就很棒:-) alt text http://www.forum-omondo.com/download/file.php?id= 253&模式=查看

于 2010-07-18T08:15:34.517 回答