2015-04-22 11 views
1

我們團隊中最初教給我們django(隨後離開)的人使用了一個controllers.py文件來實現幫助函數。許多這些功能與類直接相關。我更願意使用@staticmethod來將這些助手與它們相關的類放在一起。例如,而不是這樣做:我應該在Django中使用controllers.py還是@staticmethod?

# controllers.py 
def process_entry(): 
    # do some exciting stuff that might not have to do with an instance 

這樣調用:

from myapp.controllers import process_entry 
process_entry() 

我寧願這樣:

# models.py 
class Entry(models.Model): 
    name = CharField... 
    # some other fields 

    @staticmethod 
    def process_entry(): 
    # do some exciting stuff that might not have to do with an instance 

調用,像這樣:

from myapp.models import Entry 
Entry.process_entry() 

有沒有一種首選的,標準的方法來處理s像這樣的情節還是僅僅是個人喜好?其他人是否使用controllers.py文件?那裏有什麼?

謝謝。

編輯:

可能是一個更好的例子,佣金。

# models.py 
class Commission(models.Model): 
    check = ForeignKey 
    payment = ForeignKey 
    # other fields 

class Check(models.Model): 
    # fields 

class Payment(models.Model): 
    # fields 

任何時候支票或付款實例被修改的調整作爲所要的任何相關委員會實例或任何時候有人想手動運行的佣金,他們可以這樣做。那麼run_commissions()應該放在哪裏呢?我更喜歡這個,但顯然這不應該被封裝在數據相關的模型中?

# models.py 
class Commission(models.Model): 
    check = ForeignKey 
    payment = ForeignKey 
    # other fields 

    @staticmethod 
    def run_commissions(): 
     # do stuff 

回答

0

靜態方法被用於在一個類(主要用於工廠方法)分組相關的功能,即旁,有靜態方法和功能之間沒有差別。

但是。在你的例子中,你正在爲DATABASE模型分配行爲。 DATABASE模型不是LOGIC模型,您應該將它們與您的應用程序邏輯分開。無論如何,控制器在這方面也是一個糟糕的名字。

我不知道什麼process_entry做,但如果它只是改變一個接入實體,那麼它可以被命名爲:Entry.process(),但不能作爲進入DB模式!只是另一個入門級。但是,如果該功能不僅僅是改變Entry,那麼它不應該被分配給Entry實體,而是作爲服務功能。

相關問題