1

将自定义(通常是易失的)数据引入实体模型类的最佳实践是什么?这首先听起来像是一种不好的做法,但它似乎是一种很常见的情况。在我们最近的 Web 应用程序中,我们开发了一个合适的模型,并且在大多数情况下,我们可以很好地加载模型实体。但是在某些情况下,我们无法加载整个实体层次结构;例如,我们需要加载几个 SQL COUNT 的结果,或者可能在模型实体旁边(或嵌入在其中)加载一些附加信息。所以基本上,要求和条件是:

  1. 这是一个 Web 应用程序,其中 99.9999999999% 的操作都是读取操作。

  2. 他们不需要处理或执行任何复杂的业务逻辑。我们只需要将数据快速转换为 HTML。

  3. 在几个性能关键的情况下,我们需要加载不适合任何模型属性的 SQL 聚合结果。

  4. 如果需要,我们需要一种可扩展的方式来引入任何新的自定义数据。

你通常如何解决这个问题,而不需要在你的 ORM 上工作太多(例如来自 db 的原始数据)?我相信这已经讨论过很多次了,但我无法找到一个好的谷歌查询来找到任何有用的东西。

编辑:由于我后来意识到这个问题的形成不是很好,我决定重新制定它并开始一个新的

4

3 回答 3

2

如果您只是在浏览器之间获取关系数据,而在两者之间几乎没有或根本没有行为,这听起来像是您试图用 OO 范式解决关系问题。

我可能倾向于完全放弃面向对象的方法。

我的团队最近重写了一个应用程序,问“什么是最简单的可以工作的东西?” 和“最接近问题的语言是什么?”。我们的新应用程序取代了 OO 应用程序,最终变得更小、更快、更便宜了 10 倍。

我们在数据库服务器上使用 SQL、存储过程、XML 库、XSLT(获取 HTML)和 javascript。

于 2009-11-23T22:22:18.797 回答
0

像我这样的 OOP 纯粹主义者会使用装饰器模式。 http://en.wikipedia.org/wiki/Decorator_pattern

但问题是,有些人可能不需要它提供的灵活性。另外,为每个不同的操作创建新类可能看起来有点过头了,但它提供了良好的编译类型检查。

于 2009-03-06T17:31:45.777 回答
0

在我看来,最佳实践是您的应用程序使用域模型模式来使用数据。领域模型可以提供业务逻辑方法来执行有意义且与您的应用程序需求相关的查询类型。

这些可以获取直接映射到数据库行的“实时”结果,因此可以进行编辑和“保存”。

但此外,域模型可以提供获取只读结果的方法,这些结果太复杂而无法轻松保存回数据库。这包括您的分组聚合查询结果示例,还包括连接查询结果集、作为列的表达式等。

域模型模式提供了一种将应用程序的 OO 设计与物理数据库设计分离的方法。

于 2009-03-08T01:30:14.433 回答