【发布时间】:2011-03-09 06:21:06
【问题描述】:
我需要为我的 JSF 应用程序绘制一个项目文档的类图。所以我有很多类作为托管 bean,有很多属性,因此有很多 getter 和 setter。
当我绘制类图时,我是否应该在图中也包含 getter 和 setter,或者我可以直接留下它们吗?
【问题讨论】:
标签: java uml getter-setter class-diagram documentation-generation
我需要为我的 JSF 应用程序绘制一个项目文档的类图。所以我有很多类作为托管 bean,有很多属性,因此有很多 getter 和 setter。
当我绘制类图时,我是否应该在图中也包含 getter 和 setter,或者我可以直接留下它们吗?
【问题讨论】:
标签: java uml getter-setter class-diagram documentation-generation
包含它们是不合适的。您可以只添加一行 accessors methods
【讨论】:
包含 getter 和 setter 是个坏主意。他们正在浪费“房地产”来复制已经显示在类的属性/属性部分中的信息。
其他答案表明 UML 图需要记录 Java getter 和 setter 的“不寻常”可见性,或 getter 和 setter 中的“特殊”行为。
我想在某些情况下这是合理的。但是,我会反驳:
UML 图不需要显示所有内容。只有重要的事情。事实上,一个好的 UML 图的标志之一是它不会被不重要的东西混杂在一起。所以这些细节只有在它们真的很重要时才应该包括在内。
抽象边界的细节通常不是设计的关注点。 Java 程序员应该只知道在需要时如何实现抽象/封装的基础知识。此外,程序员很可能对需要“多孔”抽象边界的情况有更好的洞察力;例如出于性能原因。 (UML 并不是为了表达那种东西而设计的。)
字段和方法的精确行为通常不是 UML 设计文档所关心的。 (除非设计者还打算在 OCL 中指定方法的前置条件、后置条件和不变量的长度!)但是,如果 UML 图需要说一个字段永远不能是null ,或者获取字段会增加计数器,您应该能够将其描述为字段上的 cmets(或 OCL 约束)。
最后,UML 图不应该是软件的唯一技术文档。 javadocs 自动记录方法和字段的访问修饰符/可见性。同样,如果程序员已经实现了具有需要记录的“特殊”行为的 getter 和 setter,则应在 javadoc cmets 中对此进行描述。
【讨论】:
你不应该在你的图表中包含 getter 和 setter 直到他们做了一些特殊的事情:空检查等等。但这是糟糕设计的标志,所以一般的回答是“不,你不应该”。
【讨论】:
until they do something special: null checking and so on. But it is a sign of bad design 你的意思是在 setter/getter 中检查 null 是不是很糟糕?
UML 是一种相当非正式的表示法,最好先设置您将在项目或组织中使用的规则。 例如,通常隐藏 getter 和 setter,但有时显示所有细节很重要。规则可以是:
如果您的属性是使用私有变量和一对具有相同可见性的 getter 和 setter 实现的,您只需创建一个具有此可见性的属性。
如果您的属性是使用私有变量实现的,但 getter 和 setter 具有不同的可见性,例如公共 getter 和受保护的 setter,则建议在模型中显示 getter 和 setter。
所以儿子...
【讨论】:
通过创建您自己的 «get/set» 和 «get» 构造型用于对这些私有属性进行分类,明确相关属性的 getter/setter 约定可能很有用。请参阅我对Shortcut for denoting or implying getters and setters in UML class diagrams 的回复。
【讨论】: