我应该在类图中包含getter和setter吗?

26

我需要为我的JSF应用程序绘制一个类图,以备项目文档所需。因此,我有很多作为托管bean的类,每个类都有许多属性和许多getter和setter。

当我绘制类图时,是否应该将getter和setter包括在图中,还是可以简单地省略它们?

5个回答

20

不应该包含它们。您可以添加一行文字,写上访问器方法


1
你能解释一下为什么要添加那行代码吗?我正在进行 UML,但是不太理解整个想法。 - user2547435
@JigarJoshi 当我添加访问器方法时,它自动将实体对象作为参数传入。我该如何解决这个问题? - QWERTY
3
如果你正在使用一种工具,最好的方式是添加一个注释框,比如“省略了常用的访问器方法”。 - atorres

7
包括getter和setter是一个不好的想法。它们浪费了“房地产”,重复了已经显示在类的属性/属性部分中的信息。
其他答案建议UML图需要记录Java getter和setter的“异常”可见性或getter和setter的“特殊”行为。
我想在某些情况下这可能是有道理的。然而,我会反驳:
- UML图不需要展示所有内容,只需要展示重要的事情。事实上,好的UML图的标志之一就是它没有被无关紧要的东西弄得杂乱无章。因此,如果这些细节真的很重要,才应该包含在内。 - 抽象边界的精细细节通常不是设计的关注点。Java程序员只需要知道如何在需要时实现抽象/封装的基础知识。此外,程序员很可能对需要“多孔”抽象边界的情况有更好的了解;例如出于性能原因。(UML没有设计来表达这种情况。) - 字段和方法的精确行为通常不是UML设计文档的关注点。(除非设计者还要指定方法的前置条件、后置条件和不变式。)但是,如果UML图需要说明字段永远不能为null,或者获取字段会增加计数器,您应该能够将其描述为字段的注释(或OCL约束)。 - 最后,UML图不应该是软件的唯一技术文档。javadoc自动记录方法和字段的访问修饰符/可见性。同样,如果程序员使用具有“特殊”行为的getter和setter进行了实现,需要在javadoc注释中进行描述。

3

在您的图表中不应包含getter和setter,除非它们执行某些特殊操作:例如空值检查等。但这是糟糕设计的标志,因此通常的答案是“不应该”。


直到它们做一些特殊的事情:空值检查等等。但这是糟糕设计的标志。你的意思是在setter/getter中检查null是不好的吗? - jmj
1
在某些情况下,空值检查并不是不好的,而是它被使用的方式。假设您在一个 Hibernate 实体中有以下方法:getPerson() { if (person == null) person = new Person(); return person; }。这个方法隐式地创建了一个实体,但它本不应该这样做。 - Vladimir Ivanov
1
是的,这当然取决于设计和业务需求。 - jmj

0

0

UML是一种相对非正式的符号表示法,最好先在您的项目或组织中设定使用规则。例如,通常隐藏getter和setter,但有时显示所有细节很重要。可以制定以下规则:

如果您的属性使用私有变量和一对具有相同可见性的getter和setter实现,则只需创建具有此可见性的属性。

如果您的属性使用私有变量,但getter和setter具有不同的可见性,例如公共getter和受保护的setter,则建议在模型中显示getter和setter。

等等...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接