我刚刚在几天前找到了web2py,并且已经阅读了文档以及一些示例应用程序的来源.我想用 Python开始编程.似乎我对MVC的看法与他们的[web2py社区]略有不同. 在学习和使用PHP(以及Kohana框架)之后
在学习和使用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语句,并且可能不值得编写方法.当然,如果需要,您可以在模型(或模块)中定义类和函数,只需从控制器中调用它们 – 无论哪种方式最适合您.