4

幾天前我剛剛發現了web2py,並且一直在閱讀文檔並通過一些示例應用程序的源代碼。我想在Python中開始更多的編程。似乎我對MVC的看法與他們[web2py社區]有點偏差。如何封裝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似乎是一個非常強大的功能,它與其他幫助程序緊密集成。我想知道如果按照上面所述拆分我的業務邏輯會限制這些功能嗎?

+0

看來這個問題會更好地問,並已被問及,在web2py谷歌組。 – BDuelz

+0

是的,我想你會從[web2py組](https://groups.google.com/forum/?fromgroups&pli=1#!forum/web2py)獲得更多關於此的信息。 – Anthony

+1

@BDuelz可以在這裏提問已經在其他地方回答的問題。 –

回答

2

我想部分區別在於web2py使用DAL(數據庫抽象層)而不是ORM。您可能會發現this explanation有幫助。正如它指出的那樣,在某些情況下,計算域或虛擬域可能會做你想要的。此外,你的例子類中定義的一些方法將是非常簡單的DAL語句,並且可能不值得爲其編寫方法。當然,如果你願意,你可以在你的模型(或模塊)中定義類和函數,只需從你的控制器中調用它們 - 無論哪種方式對你最合適。