【问题标题】:Is there a design pattern for an object representing a row from a query result?代表查询结果中的一行的对象是否有设计模式?
【发布时间】:2016-03-14 05:30:34
【问题描述】:

例子

假设我通过普通 SQL 或 ORM 库从应用程序中对数据库进行复杂查询:

SELECT user.name, book.title, home.address
       FROM user 
       JOIN book on user.book_id = book.id
       JOIN home on book.home_id = home.id;

结果是(name, title, address) 元组的列表。

从每一行初始化一个对象通常很方便,a-la:

def Shipping(object):
    def __init__(self, row):
        self.name = row[0]
        self.title = row[1]
        self.address = row[2]

    def action(self):
        return "Sending %s to %s at %s" % (self.book, self.user, self.address)

问题

是否有代表数据库查询中一行的对象的设计模式?

注意事项

  • 遵循Active Record answer:这种情况不同。 Active Record 指的是表中的一行,它与数据库相关联。这意味着对象中的更改可以在数据库中实现。我的案例讨论了一个反映查询的对象,它可能是复杂 JOIN 的结果。生成的对象与数据库无关,其中的更改无法反映回数据库。

【问题讨论】:

  • DTO 浮现在脑海中,但实际上它并不是一个“模式”。

标签: sql design-patterns orm


【解决方案1】:

The Active Record pattern 用一个对象表示每个数据库行(尽管它使该对象能够更新数据库,但您没有指定)。

【讨论】:

  • 戴夫,很抱歉回复晚了,刚刚看到你的回答。正如您所指出的,我的案例与 Active Record 不同。前者获取任意查询结果(可能是 JOIN),并且与 DB 没有任何关系。后者将一个 DB 行与一个对象相关联,并保留一个 DB 连接。
  • 知道了,谢谢。可能想在问题中用文字说明这一点。
猜你喜欢
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
  • 1970-01-01
  • 2021-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-31
相关资源
最近更新 更多