2011-02-16 32 views
3

这是一个关于如何紧密地将消息交换绑定到数据模型的设计哲学问题。休眠和JAXB/JSON(消息模型和数据模型)

给定一个实体pojo,我可以使用Hibernate,JAXB和JSON注释对它进行注释,以便可以将相同的类写入数据库以及序列化/反序列化以进行消息交换。这方面的便利因素非常高,因为这意味着我不必编写翻译类来将消息转换为用于数据库的类(这对于繁琐和维护来说很重要)。

但是,这一直困扰着我,因为它将您的界面和消息与数据模型的结构和设计紧密联系在一起。对于某些类型的应用程序,这些消息可能正是您想要在数据库中存储的内容,而其他时间则是数据库字段的子集。

有没有更好的方法来解耦这些,而不必让自己变得繁琐的翻译/转换类?是否有一种模式可以用来至少更好地耦合消息和数据?

回答

0

我完全同意您的疑虑......这是一个灰色区域,因为它确实取决于您尝试解决的域问题。

如果您的项目简单而直接,那么我可能只是注释实体并完成。这样,消费者(例如:Javascript代码)基本上挑选出需要在页面上显示的数据。在这种情况下,您负责阅读JSON/XML并执行您喜欢的任何操作。但是,如果您正在编写Web服务以暴露给其他人,则数据通常来自不同的实体(表连接)。在这种情况下,返回与实际实体结构紧密耦合的如此复杂的JSON/XML是没有意义的。如果您决定在一天内重构您的实体,那么您的所有消费者都将受到负面影响。因此,最好创建单独的bean,以反映供消费者使用的汇总数据,而不是依赖现有的实体bean。这样,生成的JSON/XML将能够承受未来的变化并最大限度地减少负面影响。

+0

像往常一样,没有银弹=)我能想到的唯一的事情就是从一个共同的实体开始,永远不要害怕重构它来分离它。我知道,说起来容易做起来难。我只是希望有一个好的模式或惯例是一个更好的起点。 – Mark 2011-02-16 01:20:01