2016-01-24 59 views
1

处理使用活动记录模式返回非实体对象的最佳方法是什么?活动记录模式 - 使用非实体对象

作为一个例子,可以说我有以下表格和相应的类来表示它们。

客户 订单 的OrderLineItem 项目

不过,我需要一份报告,包括所有4代表的信息。

将这种方法存在于这四个类中的任何一个中都没有意义。哪里是放置这种逻辑的最佳地点?例如,可以说我正在使用Java和ActiveJPA。这项技术确实不是那么重要,更多的是设计问题。

在使用Spring Data JPA和Hibernate的Java/Spring中,我创建了Spring Data repository的自定义实现,并将其下拉到JDBC中以进行自定义查询。然而,这是使用存储库模式,它不是一个优雅的解决方案,但完成了工作。

寻找Active Record实现的最佳方法。

回答

0

作为一个开发人员,主要在rails上使用ruby,我觉得你的问题很有趣。我自己也遇到过这个问题。

我粗略地发现两种解决方案:

  • 要么我非规范化的数据,创建表和活动记录模式。
  • 或者我创建了一个理解我需要的方法,使相应的查询到数据库的类。

我可以在“解决方案”中看到好处和问题。

在第一种情况下,主要优点是我可以使用我的其他活动记录模型以查询接口为关键词来多态地处理模型,并且我不必考虑设计查询。作为一个缺点,我可能会得到一个anemic object它暗示的一切。在另一方面,具有denormilized数据,我得到这种做法的利弊:

  1. 查询时间更可能是短
  2. 这将占用更多的空间数据库存储比其他替代
  3. 你必须确保你的数据保持一致,并为此,根据情况,你可能需要编写大量的代码。

至于第二种情况,它基本上是相反的。它消除了数据库所需的额外空间问题,但不会消除潜在的贫血对象的问题(尽管您可以考虑将查询作为类的行为的方法,因此您不会真的结束根本没有AO)。 通过这种方法,用户不必担心数据的一致性,但您可能需要花一些时间来设计正确的查询,并且查询时间将会(很可能)更长。

与设计中的大多数情况一样,没有“正确答案”,我认为我们只能在具体问题的背景下平衡利弊。

这些是我的想法,我会很感激别人会分享他们的。