【发布时间】:2017-07-15 19:03:49
【问题描述】:
我最近开始研究 Flask 和 Flask-SQLAlchemy。来自 Django 背景,我发现 Flask-SQLAlchmey 非常复杂。我读过 SQLAlchemy 实现了 Data Mapper 模式,而 Django ORM 是基于 Active Record 模式的。
Here 是一个编写的示例代码,它实现了存储库模式来访问数据库。
Here 是 S.Lott(271k 声誉)评论的另一个链接,他说 ORM 是数据访问层,它与模型分离。
我的问题是:
- 您能否提供上述示例中的实际用例或您自己的数据映射器模式有用的示例?我读到的所有地方都是数据映射器模式在复杂情况下很有用,但没有看到示例。
- 在上述情况下使用存储库模式是否与使用数据映射器模式相同?
- 数据映射器倡导者是否像示例中那样在与模型不同的类中编写选择查询?
- 为什么
Question.query.filter_by(text = text).all()不比使用更好db.session.query(Question).filter(Question.text == text).all()?
这不是DataMapper vs ActiveRecord pattern的重复,因为这只是说明定义,我对实际示例更感兴趣。
【问题讨论】:
-
我建议你阅读本书 (amazon.com.br/…) 从第 44 页开始,Martin Fowler 演示了 Java 中的适用性。 DataMapper的目标是:就是让目标状态远离持久化目标的状态,以及更纯粹的对象
-
我想一个有趣的映射实际例子是inheritance hierarchies。不确定您将如何使用 AR 实现例如连接表继承,尽管我不太了解 AR。
标签: python design-patterns activerecord flask-sqlalchemy datamapper