如何封装web2py业务逻辑?

时间:2011-08-01 19:41:17

标签: model-view-controller encapsulation business-logic web2py

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

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

我很好地设定了我对模型的看法,我宁愿将业务逻辑放在模型中(用于可重用性和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似乎是一个非常强大的功能,它与其他帮助器紧密集成。我想知道如上所述分割我的业务逻辑会限制这些功能吗?

1 个答案:

答案 0 :(得分:2)

我认为部分区别在于web2py使用DAL(数据库抽象层)而不是ORM。您可能会发现this explanation有帮助。正如它所指出的,在某些情况下,计算字段或虚拟字段可能会做你想要的。此外,您的示例类中定义的一些方法将是非常简单的DAL语句,并且可能不值得为其编写方法。

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