我将首先绘制一个包含所有关系的类图,并根据应用程序的要求仅实现必要的类。
您可以使用贫乏的方法(属性加上 getter 和 setter)来保持简单,并避免在同一步骤中编写业务逻辑的步骤。使用贫血模型,逻辑将进入相应的服务类。这样您以后可以考虑用例。
我知道有些人不喜欢这种做事方式,但它确实有助于维护并避免一些依赖性问题。
下面回答吞噬极乐世界的问题:
就分析而言,从用例(What)开始,然后进入类图(How),这听起来像是一个很好的经验法则。就个人而言,我会在之后制作序列图(何时和谁?),因为您需要知道需要在哪些进程/对象之间发送消息。
除此之外,我认为 UML 只是一种对系统/项目进行建模的方法,而不是一种方法论本身(与 Merise、RAD、RUP、Scrum 等不同)。只要他们有足够的信息来完成它,就没有什么能阻止人们从任何图表开始。事实上,它们应该同时完成,因为每个图表都是同一系统/项目的不同视角。
所以,总而言之,这取决于你如何进行分析。在我的学习过程中,我学会了严格的瀑布方法,在生成一些代码之前,你需要从头到尾进行完整的分析。但是,在实践中情况可能会有所不同,因为当务之急可能是在尽可能短的时间内生成一个工作应用程序。
例如,我最近被介绍到 Scrum 方法论的一个练习,该练习涉及创建一个人们可以发布他们的小说的网站。由于存在时间限制和对应该实现什么的清晰愿景,我们立即开始使用一个简单的类图来表示域模型。然后从我们制作的一系列模拟屏幕中推导出用例。
根据记忆,这些类是 Story、Chapter、User 和 Category。最后一个类已被淘汰,取而代之的是更灵活的 Tag 类。正如您想象的那样,由于应用领域驱动设计和 Java 编程语言的特殊性,现有项目的完整类图会复杂得多。
这种方法可以被视为草率。然而,像这样的网站可以很容易地在几周内使用迭代过程制作出来,并且仍然设计得很好。与瀑布方法相比,迭代过程的优势在于您可以随时调整需求。频繁的需求变化是一个现实,因为人们经常会改变他们的想法,并且可以说在每次迭代之后生成一个工作应用程序的可能性允许人们坚持下去。
当然,当您向客户展示项目时,最好使用 UML 图和一些模拟屏幕进行完整的分析,以便他们了解您提供的内容。这就是 UML 的用武之地。一旦您解释了一些视觉约定,个人应该能够理解这些图表。
最后,如果您正试图确定客户想要什么,那么逐步建立一份可以随身携带的问卷可能是个好主意。采访一个人是您确定应用程序真正需要哪些概念/功能的唯一方法,您应该期望返回以澄清某些方面。另一个提示是当您遇到不熟悉的主题时,在网络上进行一些快速研究。
在您的示例中,这将是通过解剖学的基础知识。除其他外,这将帮助您决定模型应该包含什么以及它应该具有什么粒度(应该考虑哪组器官?它需要有多精确?只需要对器官进行建模还是应该将它们分解成它们的成分,如组织、细胞、化学成分等?)。