【发布时间】: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