在MVC框架中,通常在哪里嵌入SQL炼金术代码,将查询放在Controller Methods
中还是只使用Model Methods
是理想的选择?在
query = session.query(User, Document, DocumentsPermissions).join(Document).join(DocumentsPermissions).filter_by(Document.name=="Something")
或者我把它委托给一个接受参数的模型方法?最好的方法是什么?后者的好处之一是可以重用,几乎为API程序员提供了一个视图。另一个优点是,如果我把它作为一个类方法,我可以轻松地克服它。这通常有助于定制,尤其是在商业软件中。在
^{pr2}$TL;DR:当您使用ORM的SQL炼金术时,MVC中“M”的概念不是很模糊吗?我对Model
View
Controller
设计模式没有任何问题。在
[注:我不确定这是否属于代码审查网站,如果是,请让我知道,我可以转移过来。]
我倾向于将数据库查询代码放在控制器中,而不是模型中。据我所知,模型方法是用来将模型的数据转换成其他数据。在
例如,
UserModel
可以有一个FullName()
方法来返回用户的名字和姓氏的连接。在然而,
UserController
包含一个GetAll()
方法来获取所有用户的列表,这是数据库查询代码的所在。在我非常喜欢第二种方法。它有几个优点:
getdocument('valid_name')
、getdocument(None)
、getdocument(123)
等,以确保它们都按预期工作或失败,而无需处理周围的所有控制器代码。在getdocument()
编写一个mock,以便它始终返回一个已知值,并测试控制器是否正确处理它。在相关问题 更多 >
编程相关推荐