在Java中创建子类以更改注释被认为是不好的做法吗?

时间:2012-02-06 16:01:34

标签: java inheritance annotations

例如,在编写JPA或Hibernate代码时,我可能想创建一个域类的后代,比如Account。下降版本表示用户显示的表单。表单只有大约一半的帐户字段。因此,我用来保存表单值的对象不应该更改其他字段。

使用继承来更改被认为是错误的注释吗?假设不是,有没有好的短手或设计模式来做得更好或更有效?

1 个答案:

答案 0 :(得分:2)

我会说你在这里描述的情况(至少我是如何理解的)不适合创建子类。

基本上你想限制表单只改变实体的某些字段/关联,对吧?我进一步假设您不相信表单的开发人员只更改了应该可编辑的字段,因此需要限制它。

在这种情况下,一个选项可能是使用DTO pattern(数据传输对象):为表单数据创建DTO并让用户填充其字段。然后将DTO传递给相应更新实体的服务。这样您就可以控制哪些字段可以编辑以及如何执行更新。

另一种方法可能是为实体创建一个包装器,当调用不可编辑字段的setter时抛出异常。但是,这将是一个运行时解决方案,我更喜欢这里的DTO方法。

编辑

在这种情况下,继承可能会出现问题的一些原因:

  • 子类不代表实体,但是,您仍然需要在数据库中表示子类(通过鉴别器或其他表)
  • 由该表单创建的实体将始终具有子类,因此在其他地方不可编辑(除非您弄乱数据库等。)
  • 实体是数据容器,不应该依赖于演示文稿。因此,为一个UI用例(在您的情况下为表单)设置一个特殊实体(子类)将违反单一责任原则和模型/数据与视图/表示层之间的抽象。
相关问题