其他海报此前曾在此论坛中表示,当您的Django应用程序开始变得庞大且无法管理时,您应将其拆分为多个应用程序。我现在就在这一点上。允许这些应用程序之间进行通信的最佳做法是什么?
我的一个应用程序(让我们称之为处理器)处理非常大的数据集。每小时一次,它会为另一个应用程序生成少量新数据。这个其他应用程序(我们称之为Presenter)向用户显示数据。
处理器应如何将新数据传递给Presenter?它应该只是导入部分Presenter的模型,那么它可以在Presenter的数据库中创建和保存记录吗?这似乎与我的紧密联系。或者它应该通过调用Presenter中的函数来传递数据?或者将数据放在处理器和Presenter都知道的某种数据存储中?
你们通常如何解决这个问题?
/马丁
答案 0 :(得分:5)
我肯定会在Presenter应用程序中使用导入处理器的模型。例如,您可以添加额外的用户信息:您拥有UserPreferences
模型,ForeignKeyField
到django.contrib.auth.models.User
。由于django.contrib
是“标准库”,因此在两个应用程序之间执行此操作可能会有一种不好的感觉,但不过,它是直接耦合。
如果您的应用程序是耦合的,那么您的代码应该耦合以反映这一点。这遵循了明确优于隐含的观点,对吗?
但是,如果您正在设计更通用的东西(即您将为不同类型的处理器使用多个Presenter应用程序实例),则可以将特定模型存储为设置:
import processor_x.models
PRESENTER_PROCESSOR_MODELS = presenter_x.models
然后,在Presenter模型中:
from django.conf import settings
class Presenter:
processor = models.ForeignKey(settings.PRESENTER_PROCESSOR_MODELS)
警告:我从未尝试过这个,但我不记得设置的限制只是字符串,元组或列表!