代码之家  ›  专栏  ›  技术社区  ›  Fortyrunner

当你开始一个新的POJO课程时,你会怎么做?

  •  1
  • Fortyrunner  · 技术社区  · 15 年前

    假设你正在设置一个pojo。

    设置类时定义了什么?

    这是我的清单

    • 构造器用提供的字段创建一个对象(这样我可以使字段成为最终的,因此是不可变的)
    • 弦线
    • 等于
    • 哈希码
    • 可比工具
    • 获取方法(如果适用)
    • [可选]复制可变字段的构造函数-以确保类的不可变
    • [可选]定义访问字段和方法的接口。
    • [可选]实现可序列化并实现版本控制方案。

    这是多余的还是合理的工程?你还想补充什么吗?

    5 回复  |  直到 15 年前
        1
  •  2
  •   Alex Taylor    15 年前

    我假设,因为您提到了版本控制方案,所以我们讨论的是持久类。

    我想说您有一个很好的列表,但是(取决于您的ORM引擎),我还倾向于确定哪些值(除了autoincrement i d),定义任何记录的“唯一性”。

    我之所以提到这一点,是因为Hibernate对集合有着奇怪的行为,如果您在哈希代码中使用ID,因为它在整个过程中很容易改变。

    同样值得注意的是,值得您花时间研究哪些集合是懒惰的或渴望的,特别是对于ToString方法(如果您在脱离持久性上下文时执行ToString,则可能会导致懒惰的inits)。

        2
  •  6
  •   boxofrats    15 年前

    如果我知道我要做什么,通常先编写一个测试,然后编写类使其运行。

        3
  •  1
  •   Nat    15 年前

    这完全取决于对象必须做什么。例如,如果对象是可变的,它不应该实现equals和hashcode,也不应该具有可比性。如果它永远不会被序列化,那么实现可序列化和担心版本控制是没有意义的。如果对象是不可变的,则不需要复制构造函数。

    我通常从一个接口开始,该接口定义系统中的其他对象希望新对象做什么。实现该接口将“拉”类的其余部分。

        4
  •  1
  •   Yishai    15 年前

    如果你有很多字段,我会考虑一个构建器——如果不变性很重要的话。

    就这一过度杀戮而言,它实际上很大程度上取决于用例。如果这是一个内部对象,在您自己的代码中使用,或者在一些密切的合作者中使用,我会说是的,最明显的是过早地完成所有这些操作会造成过度杀伤力。这使得设计的发展更加困难(想想如果你添加一个字段,你需要改变多少),而且很可能会创建很多无法使用的代码。

    另一方面,如果您正在研究一个更大的分布式项目或公共API,我认为这符合基本原理。至少,这个列表上的所有内容都应该考虑,即使最终决定类可以是可变的,例如,至少决策是明智的。

        5
  •  0
  •   Tom Hawtin - tackline    15 年前

    完全过度杀伤。应用雅格尼。

    设计类来完成客户机代码对它们的要求,也许还需要进行测试。再也没有了。如果你正在写一个图书馆,那么你当然需要更完整一点。即便如此,作为一个规则,在你考虑承诺之前至少要有三个客户。