Model view controller 如何封装web2py业务逻辑?

Model view controller 如何封装web2py业务逻辑?,model-view-controller,encapsulation,business-logic,web2py,Model View Controller,Encapsulation,Business Logic,Web2py,我几天前刚刚找到web2py,一直在阅读文档和一些示例应用程序的源代码。我想开始更多地用Python编程。我对MVC的看法似乎有点偏离了他们的[web2py社区] 在学习和使用PHP(以及Kohana框架)之后,我习惯了瘦控制器-胖模型原理,其中所有业务逻辑都放在模型中,控制器只不过是委托在模型上执行哪些方法,然后将数据传递到视图进行渲染。然而,我看到的web2py 99%的应用程序似乎都有fat控制器(将所有业务逻辑放在操作中),而模型只不过是表/约束定义 我对模型的看法非常清楚,我更愿意将业

我几天前刚刚找到web2py,一直在阅读文档和一些示例应用程序的源代码。我想开始更多地用Python编程。我对MVC的看法似乎有点偏离了他们的[web2py社区]

在学习和使用PHP(以及Kohana框架)之后,我习惯了瘦控制器-胖模型原理,其中所有业务逻辑都放在模型中,控制器只不过是委托在模型上执行哪些方法,然后将数据传递到视图进行渲染。然而,我看到的web2py 99%的应用程序似乎都有fat控制器(将所有业务逻辑放在操作中),而模型只不过是表/约束定义

我对模型的看法非常清楚,我更愿意将业务逻辑放在模型中(用于可重用性和干代码),但我还没有在网上看到任何这样做的代码,尽管公平地说,我还没有找到足够数量的应用程序。谁能给我指一下正确的方向吗

说得很清楚,我想让我的模型成为实际的类,并将所有业务逻辑和数据库交互封装到显式方法中。类似于

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。你可能会觉得有用。正如它指出的,在某些情况下,计算字段或虚拟字段可能会执行您想要的操作。另外,示例类中定义的一些方法是非常简单的DAL语句,可能不值得为其编写方法


当然,如果您愿意,您可以在模型(或模块)中定义类和函数,只需从控制器中调用它们——任何最适合您的都可以。

在web2py google group上,这个问题似乎会被问到,而且已经被问到了。是的,我想你会从@BDuelz那里得到更多关于这方面的见解。在这里问一些其他地方已经回答过的问题是可以的。