java - 是否有模型/实体类的模式

标签 java design-patterns model entity

当您从多个数据源中提取模型对象时,最好采用什么方法?

例如,我有一个应用程序使用 hibernate 将一些数据存储在 mySQL 数据库中。如果我想在 EC2 或 Google App Engine 中存储一些其他对象怎么办?我知道 DAO 抽象了使用特定数据源的实现,但是实体本身呢?

起初我认为用 jpa 注释来注释我的实体是一个很好的解决方案,但现在看来我真的把我的实体绑定(bind)到一个特定的实现。以 App Engine 为例,其中一些注释毫无意义。

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

谢谢。

最佳答案

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

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

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

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

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

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

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

另一方面...如果您是 Dog 数据的记录系统,请考虑使用接口(interface)而不是抽象类。或者可能接口(interface) 抽象类。 Java只有单继承;将您的 View / Controller /其他代码绑定(bind)到接口(interface)以保证最大的 future 灵 active 。

关于java - 是否有模型/实体类的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2097567/

相关文章:

java - 使用 Jena 读取 Turtle 中带空格的 URI?

c# - 驱动 MVVM 应用程序

Javascript:配置模式

java - OOP:将设置传递给 Builder 类

model - yii 2 : override user model

nhibernate - 使用 NHibernate 的可扩展领域模型

java - 当我通过我的设备(USB 调试)运行它时,我的 UI 会失真,但在我的 AVD 上运行良好

java - LINQ的类似功能

Java/Kotlin- Akka Stream Source.reduce 在 Source 中为 null 时不起作用

Codeigniter,将变量从模型传递到 Controller