model-view-controller – 如何封装web2py业务逻辑?

我刚刚在几天前找到了web2py,并且已经阅读了文档以及一些示例应用程序的来源.我想用
Python开始编程.似乎我对MVC的看法与他们的[web2py社区]略有不同.

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

我很好地设定了我对模型的看法,我宁愿将业务逻辑放在模型中(用于可重用性和干代码),但我还没有看到任何在线代码,但是,公平地说,我还没有找到足够数量的申请.有人能指出我正确的方向.

为了清楚起见,我想使我的模型成为实际的类,并将所有业务逻辑和数据库交互封装到显式方法中.有点……

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语句,并且可能不值得编写方法.

当然,如果需要,您可以在模型(或模块)中定义类和函数,只需从控制器中调用它们 – 无论哪种方式最适合您.

点赞