几天前我刚刚找到了 web2py,并且一直在阅读文档和一些示例应用程序的源代码。我想开始更多地使用 Python 进行编程。看来我对 MVC 的看法与他们的 [web2py 社区] 有点偏差。
在学习和使用 PHP(和 Kohana 框架)之后,我习惯了瘦 Controller - 胖模型原理,其中所有业务逻辑都放在模型中, Controller 只是委托(delegate)在模型上执行哪些方法,然后将数据传递到 View 上进行渲染。然而,我见过的 99% 的 web2py 应用程序似乎都有胖 Controller (将所有业务逻辑放在 Action 中),而模型只不过是表/约束定义。
我对模型的看法非常好,我宁愿将业务逻辑放在模型中(为了可重用性和 DRY 代码),但是我还没有看到任何在线代码可以做到这一点公平,我还没有找到大量的应用程序。有人可以指出我正确的方向。
明确地说,我想让我的模型成为实际的类 并将所有业务逻辑和数据库交互封装到显式方法中。类似于...的东西
class Article(object):
def get_article(self, id):
# Retrieve article by id, using db instance
pass
def get_latest_articles(self, limit):
# Retrieve latest articles
pass
def get_hot_articles(self, limit):
# Retrieve hot articles, based on algorithm for "hot"
pass
def create_article(self, data):
# Insert article
pass
def define_tables(self):
# Define schema the web2py way
pass
我还没有找到正确的方法来做到这一点。
我对 web2py 的排练不是很好,但我知道有很多功能。例如,DAL 似乎是一个非常强大的功能,它与其他助手紧密集成。我想知道如上所述拆分我的业务逻辑是否会限制这些功能中的任何一个?
最佳答案
我认为部分区别在于 web2py 使用 DAL(数据库抽象层)而不是 ORM。您可能会发现 this explanation有帮助。正如它所指出的,在某些情况下,计算域或虚拟域可能会做你想做的事。此外,您的示例类中定义的一些方法将是非常简单的 DAL 语句,可能不值得为其编写方法。
当然,如果你愿意,你可以在你的模型(或模块)中定义类和函数,然后简单地从你的 Controller 中调用它们——任何最适合你的。
关于model-view-controller - 如何封装web2py业务逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6903515/