Java DAO,实体,工厂,到底在哪里?

时间:2014-09-10 18:12:22

标签: java jpa

我有一个Tomcat应用程序,它使用从Eclipse / JPA自动生成的实体。然后,我手动编码了与数据库接口的DAO。

我认为保持实体简单有很大好处。例如规范说它必须有一个空白的构造函数。如果数据库架构发生变化,我可以将它们重新分配。但我很想扩展它们。

有几个问题......

如果我创建一个新实体,我希望某些字段具有非空值。如果我有一个空的构造函数,我不能在那里做。例如status ='新',创建日期=新日期()等

我意识到我可以使用工厂。但是现在应该在DAO中说出来吗?例如DAO.getNewObject()?

同样,如果我想使用测试或验证逻辑,它会去哪里?例如完整性得分=如果填写姓名,地址,电话等?这种东西应该生活在DAO吗?还是实体?或者是其他东西?

我是否应该有一个扩展实体的新类并将逻辑放在那里?

是否认为某种建筑物被某处覆盖?

1 个答案:

答案 0 :(得分:0)

  1. 对于NotNull,MinLength等验证,请考虑使用a suitable JSR303 compatible validator
  2. 对于某些业务验证,有两种方法:使用单独的验证器类或在对象本身中使用验证。我有时会在对象本身中进行独立验证。但是如果代码变大,那么最好将验证分离/解耦成验证器。 (Spring可以帮助您将分离的验证器与服务绑定。)但是,我不建议在DAO中使用验证逻辑。应使用数据访问对象来访问数据。假设您的数据库包含经过验证的数据,则可以在更高级别执行验证。您可以将对象传递给验证器方法,而不是扩展任何内容。
  3. 扩展实体类的Validator类不是一个好主意。
  4. 您应该在哪里验证对象? IMO您可以验证对象或数据何时跨越边界。最特别是从请求数据(控制器层)创建对象时。此外,在对象可变时验证或制作防御性副本。
  5. 正如内森提到的时区(以及货币,字符编码等)问题可能会非常棘手。所以达到标准。这有助于最大限度地减少验证和转换。