【问题标题】:Should I include getters & setters in class diagram?我应该在类图中包含 getter 和 setter 吗?
【发布时间】:2011-03-09 06:21:06
【问题描述】:

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

当我绘制类图时,我是否应该在图中也包含 getter 和 setter,或者我可以直接留下它们吗?

【问题讨论】:

    标签: java uml getter-setter class-diagram documentation-generation


    【解决方案1】:

    包含它们是不合适的。您可以只添加一行 accessors methods

    【讨论】:

    • 你能解释一下你会添加那行吗?我沉浸在 UML 中,并没有完全理解。
    • @JigarJoshi 当我添加访问器方法时,它会自动传入一个实体对象作为参数。我该如何解决这个问题
    • 如果您使用的是工具,最好的方法是添加注释框,例如“省略常用访问器方法”。
    【解决方案2】:

    包含 getter 和 setter 是个坏主意。他们正在浪费“房地产”来复制已经显示在类的属性/属性部分中的信息。


    其他答案表明 UML 图需要记录 Java getter 和 setter 的“不寻常”可见性,或 getter 和 setter 中的“特殊”行为。

    我想在某些情况下这是合理的。但是,我会反驳:

    • UML 图不需要显示所有内容。只有重要的事情。事实上,一个好的 UML 图的标志之一是它不会被不重要的东西混杂在一起。所以这些细节只有在它们真的很重要时才应该包括在内。

    • 抽象边界的细节通常不是设计的关注点。 Java 程序员应该只知道在需要时如何实现抽象/封装的基础知识。此外,程序员很可能对需要“多孔”抽象边界的情况有更好的洞察力;例如出于性能原因。 (UML 并不是为了表达那种东西而设计的。)

    • 字段和方法的精确行为通常不是 UML 设计文档所关心的。 (除非设计者还打算在 OCL 中指定方法的前置条件、后置条件和不变量的长度!)但是,如果 UML 图需要说一个字段永远不能是null ,或者获取字段会增加计数器,您应该能够将其描述为字段上的 cmets(或 OCL 约束)。

    最后,UML 图不应该是软件的唯一技术文档。 javadocs 自动记录方法和字段的访问修饰符/可见性。同样,如果程序员已经实现了具有需要记录的“特殊”行为的 getter 和 setter,则应在 javadoc cmets 中对此进行描述。

    【讨论】:

      【解决方案3】:

      你不应该在你的图表中包含 getter 和 setter 直到他们做了一些特殊的事情:空检查等等。但这是糟糕设计的标志,所以一般的回答是“不,你不应该”。

      【讨论】:

      • until they do something special: null checking and so on. But it is a sign of bad design 你的意思是在 setter/getter 中检查 null 是不是很糟糕?
      • 在某些情况下,不是空检查不好,而是它的使用方式不好。假设您在休眠实体中有以下方法: getPerson() { if (person == null) person = new Person();返回人; }。此方法隐式创建一个实体,但它不应该这样做。
      • 是的,这当然取决于设计和业务需求。
      【解决方案4】:

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

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

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

      所以儿子...

      【讨论】:

        【解决方案5】:

        通过创建您自己的 «get/set» 和 «get» 构造型用于对这些私有属性进行分类,明确相关属性的 getter/setter 约定可能很有用。请参阅我对Shortcut for denoting or implying getters and setters in UML class diagrams 的回复。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-09
          • 2014-03-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多