【问题标题】:Model class with only one String field只有一个字符串字段的模型类
【发布时间】:2020-10-21 20:29:23
【问题描述】:

我有一个类,我希望重构看起来像这样:

class PersonId {
    String personId
    //getter, setter
}

class Person{

   PersonId personId;
   //other fields...
}

在我看来,PersonId 类是不必要的,因为它只包含一个带有 id 值的字符串字段。实际上,这个字符串字段可以直接放在 Person 类中。 是否有类设计的基本规则,允许类“PersonId”? 哪个缺点有一个“PersionId”类?

【问题讨论】:

  • 这些类是从哪里来的,是你设计的还是来自某个应用程序/系统?不知道背景很难给出答案,但如果忽略历史,显而易见的答案是跳过 PersonID 类。
  • 它不是我的,我只是看到它,对我来说似乎没有用。我甚至使模型更加复杂。所以我想知道,如果有一些类设计规则,这表明这样做是一种不好的做法
  • 我很确定这没有设计规则,更多的是常识性的解决方案。
  • 对我来说似乎是一个额外的步骤,尽管我不知道它的背景。它是否被多个类扩展,然后向下转换已用于对 Person id 的控制反转?因为可能使用spring的方式,个人ID可以根据使用情况有不同的类型?即使在那种情况下,我也假设某个地方有一个派生类,它不仅仅是一个字符串。
  • 阅读Value objects,例如这里value-objects-to-the-rescue或这里the-forgotten-value-of-value-objects

标签: java class field


【解决方案1】:

据我所知,如果您的类 PersonId ONLY 包含此字符串,那么您可以将其直接放在您的 Person 类中。另一方面,如果你的类包含更多(方法或更多属性),那么它是有用的。

那么我能看到的唯一优势是您可以将相同的 PersonId 提供给多个 Person,如果您修改一个,那么它会修改其他人:

Person p1 = new Person();
Person p2 = new Person();
PersonId id = new PersonId();
id.id = "abc";
p1.id = id;
p2.id = id;
System.out.println(p1.id.id); // abc (for p1 & p2)
id.id = "foo";
System.out.println(p1.id.id); // foo (for p1 & p2)
id.id = "ba";
System.out.println(p2.id.id); // ba (for p1 & p2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-06
    • 1970-01-01
    • 2017-04-22
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多