模型/实体类是否有模式

D.C*_*.C. 8 java entity design-patterns model

从多个数据源中提取模型对象时,最好的方法是什么?

例如,我有一个应用程序已经使用hibernate将一些数据存储在mySQL数据库中.如果我想在EC2或Google App Engine中存储其他一些对象,该怎么办?我理解DAO的摘要是使用特定数据源的实现,但实体本身呢?

起初我认为用jpa注释注释我的实体是一个很好的解决方案,但现在看来我真的把我的实体绑定到一个特定的实现.例如,在App Engine的情况下,其中一些注释没有任何意义.

看起来我需要一个纯粹的POJO类来表示我的实体,完全没有持久性逻辑.如果我想模仿一只狗(是跛脚的选择,但无论如何).
拥有一个抽象的Dog类是否有意义,然后定义子类以使用特定的持久性解决方案:HibernateDog,GAEDog等.

谢谢.

Dre*_*lls 4

这是一个很好的问题,即使这个问题并不新鲜。作为一个行业,多年来我们一直在频繁地改变关于这个主题的“传统智慧”。您今天得到的答案不一定是 5 年前或 5 年后得到的答案。

在想象我想如何处理这个项目时,我想知道您没有说明的一些事情:您的应用程序是狗实体的“记录系统”吗?其他子系统/层/应用程序需要了解有关 Dog 实体的哪些信息。

在 Java 中,当您编写像 Animal > Dog 这样的全新类型时,您将获得以下奖励:有机会编写更多知道如何与 Animal 对象和 Dog 对象交互的代码。与五年前相比,2010 年我不再相信这是一个好主意。

您负责设计存储狗信息的数据库吗?我们过去一直这样做,但现在我通常发现自己与其他系统实际管理的数据记录集成:Google API、LDAP 实体、数据仓库、peoplesoft 等产品。

如果您负责定义狗是什么以及它们如何与宇宙交互,那么我会考虑一种与领域无关的方法来对内存中的狗信息进行建模。有很多:XML/DOM、JSON、Map 等。

以这些格式移动其他人的数据的优点有很多......

  • 你不必编写 POJO
  • 这些具有丰富的功能、文档和测试
  • 有许多现有的 API 可以用来转换、操作和序列化这些生物
  • 您可能会在其他域中重用您的视图/控制器/其他代码

另一方面......如果您是 Dog 数据的记录系统,请考虑使用接口而不是抽象类。或者也许是接口抽象类。Java只有单继承;将您的视图/控制器/其他代码与接口联系起来,以保证未来最大的灵活性。