【问题标题】:Fat Model Skinny View: where should I put the related codeFat Model Skinny View:我应该把相关代码放在哪里
【发布时间】:2019-08-20 11:43:55
【问题描述】:

我还是 Django 新手,正在尝试理解和实现“胖模型,瘦视图”模式。尽管我目前没有看到这个特定模型的用例,但对我来说,模型应该是自包含的以实现可重用性是有道理的。

该模型是众多云供应商之一的虚拟机。我有一个多态基础模型VirtualMachine,它定义了所有字段。我还有一个特定的模型,VirtualMachineVendor,它为VirtualMachine 实现了供应商特定的控制功能。例如处理模型创建或删除以及云资源管理的vm_create()vm_delete

视图主要处理请求并将其发送到正确的模型方法并为模板准备数据。我想添加使用一些与云提供商通信的独立 python 代码创建域记录的功能。

问题:VirtualMachine 模型应该调用这个域创建方法还是应该是 View 调用的东西?一般来说,模型应该在同一个或不同的应用程序中调用其他模型方法,还是应该在调用后将控制权返回给视图?

我也一直在尝试理解这些 SO Q&A,其中提到了这些类型方法的服务层:

Proper way to consume data from RESTFUL API in django

Separation of business logic and data access in django

相关问题:那么说胖模型指的是与模型数据操作直接相关的方法是否公平?

【问题讨论】:

  • 我不确定您所说的“域记录”是什么意思。你的意思是你的 VirtualMachine 子类的一个实例,还是与之相关的东西?
  • 我添加了更多细节...域记录将由云供应商使用一些独立的代码创建,这些代码本身与模型无关。

标签: django django-models django-views


【解决方案1】:

这真的很随意。我个人不会将任何调用外部 API 的代码放入模型本身。除此之外,这会使测试复杂化,但更一般地说,我会将模型方法视为将数据库作为它们唯一的依赖项。

如果你愿意,这可以放在 utils 模块中。

【讨论】:

  • 我愿意接受建议。你是说不是直接从模型调用 API,也许我应该创建另一个模块和类来进行调用?现在我有Model -> API,而如果我解释正确,你会建议Model -> CustomModule -> API?
猜你喜欢
  • 1970-01-01
  • 2014-02-27
  • 1970-01-01
  • 1970-01-01
  • 2014-02-25
  • 1970-01-01
  • 1970-01-01
  • 2020-09-30
相关资源
最近更新 更多