2010-09-22 31 views
9

其他海報曾在此論壇中表示,當您的Django應用程序開始變得龐大且難以管理時,您應該將其分解爲多個應用程序。我現在在那個時候。允許這些應用程序之間進行通信的最佳做法是什麼?多個Django應用程序應該如何相互通信?

我的一個應用程序(讓我們稱之爲處理器)處理非常大的數據集。一小時後,它會爲其他應用程序生成少量新數據。這個其他應用程序(讓我們稱之爲Presenter)將數據顯示給用戶。

處理器如何將新數據傳遞給Presenter?它是否應該簡單地導入Presenter模型的一部分,以便它可以在Presenter的數據庫中創建和保存記錄?這似乎與我緊密結合。還是應該通過調用Presenter中的函數來傳遞數據?或者將數據放在Processor和Presenter知道的某種數據存儲中?

你們通常如何解決這個問題?

/馬丁

回答

4

我肯定會去的演示應用的進口處理器的機型。例如,您可以添加額外的用戶信息:您有一個UserPreferences模型,其中ForeignKeyFielddjango.contrib.auth.models.User。由於django.contrib是「標準庫」,因此您的兩個應用程序之間可能沒有那麼差的感覺,但它是直接耦合。

如果你的應用程序是耦合的,那麼你的代碼應該被耦合來反映這一點。這遵循這樣的觀點:顯式比隱式更好,對嗎?

但是,如果your're設計的東西一點點更通用的(即你要使用不同類型的處理器的多個演示應用實例),則可以在特定的模型存儲爲設置:

import processor_x.models 
PRESENTER_PROCESSOR_MODELS = presenter_x.models 

然後,在您的演示模型:

from django.conf import settings 
class Presenter: 
    processor = models.ForeignKey(settings.PRESENTER_PROCESSOR_MODELS) 

警告:我從來沒有嘗試,但我不記得上設置的限制只是字符串,元組或列表!

+0

「顯式優於隱式」 - 好點,這讓我更好地將部分Presenter模型導入處理器應用程序。 – 2010-09-22 18:17:36

相關問題