【问题标题】:How to encapsulate web2py business logic?如何封装web2py业务逻辑?
【发布时间】:2011-10-17 17:25:34
【问题描述】:

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

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

我对模型的看法已经很确定了,我宁愿将业务逻辑放在模型中(为了可重用性和 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 google group 上提出,并且已经被提出。
  • 是的,我想您可以从web2py group 获得更多的见解。
  • @BDuelz 可以在这里提出其他地方已经回答的问题。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多