Толстая модель Skinny View: куда мне поместить соответствующий код - PullRequest
0 голосов
/ 29 марта 2019

Я все еще новичок в Django и пытаюсь понять и реализовать шаблон "толстая модель, тощий взгляд". Для меня имеет смысл, что модель должна быть автономной для повторного использования, хотя в настоящее время я не вижу варианта использования этой конкретной модели.

Модель представляет собой виртуальную машину для одного из множества поставщиков облачных решений. У меня есть полиморфная базовая модель, VirtualMachine, которая определяет все поля. У меня также есть конкретная модель VirtualMachineVendor, которая реализует функцию управления, специфичную для поставщика VirtualMachine. Примерами могут быть vm_create() или vm_delete, которые обрабатывают создание или удаление модели, а также управление облачным ресурсом.

Представление в основном обрабатывает запрос и отправляет его в правильный метод модели и подготавливает данные для шаблона. Я хочу добавить функциональность для создания записи домена, используя некоторый независимый код Python, который взаимодействует с провайдером облака.

Вопрос: должна ли модель VirtualMachine вызывать этот метод создания домена или это должен вызывать View? В общем, должна ли модель вызывать другие методы модели в том же или другом приложении, или модель должна возвращать элемент управления обратно в представление после вызова?

Я также пытался разобраться в этих вопросах и ответах, упоминая сервисный уровень для следующих типов методов:

Правильный способ использования данных из RESTFUL API в django

Разделение бизнес-логики и доступа к данным в django

Смежный вопрос: справедливо ли тогда говорить, что толстые модели относятся к методам, связанным непосредственно с манипулированием данными модели?

1 Ответ

1 голос
/ 29 марта 2019

Это действительно довольно произвольно. Лично я не стал бы помещать код, который вызывает внешний API, в саму модель; кроме всего прочего, это усложнило бы тестирование, но в более общем случае я бы рассматривал методы модели как наличие единственной зависимости базы данных.

Если хотите, это может быть использовано в модуле утилит.

...