在MVC框架中,您通常在哪里嵌入SQL Alchemy Code,是否可以将查询放入Controller Methods
或仅使用Model Methods
?
query = session.query(User, Document, DocumentsPermissions).join(Document).join(DocumentsPermissions).filter_by(Document.name=="Something")
或者我只是将它委托给一个采用args的模型方法?这样做的首选方法是什么?后者的一个好处是它可以重复使用,它几乎为API程序员提供了一个视图。另一个优点是,如果我将它作为一种类方法,我可以轻松地覆盖它。这通常有助于自定义,特别是在商业软件中。
#Ctrl.py
self.getdocument("Foo")
#Mdl.py
def getdocument(name):
query = session.query(User, Document, DocumentsPermissions).join(Document).join(DocumentsPermissions).filter_by(Document.name=="Something")
TL; DR :不是" M"的概念。在使用ORM的SQL Alchemy时,MVC模糊了吗?我对Model
View
Controller
设计模式没有任何问题。
[PS:我不确定这是否属于Code Review网站,如果有,请告诉我,我可以转移。]
答案 0 :(得分:2)
我更喜欢第二种方法。它有一些优点:
getdocument('valid_name')
,getdocument(None)
,getdocument(123)
等,以确保它们按预期工作或失败,而无需处理所有周围的控制器代码。getdocument()
编写一个模拟器,以便它始终返回一个已知值并测试您的控制器是否正确处理它。答案 1 :(得分:1)
我倾向于将数据库查询代码放在Controller而不是Model中。根据我的理解,模型方法用于将模型的数据转换为其他内容。
例如,UserModel
可能有FullName()
方法来返回用户的名字和姓氏的串联。
然而,UserController
包含GetAll()
方法来获取所有用户的列表,这是找到数据库查询代码的位置。