Я пишу проект на Django и вижу, что 80 % кода находится в файле models.py
. Этот код сбивает с толку и через определенное время я перестаю понимать, что происходит на самом деле.
Меня вот что беспокоит:
- Мне некрасиво, что моя модель уровень (который должен был отвечать только за работу с данными из БД) это еще и отправка почты, хождение по API к другим сервисам и т.д.
- Также считаю неприемлемым размещать бизнес-логику в вид, потому что таким образом его становится трудно контролировать. Например, в моем приложении есть как минимум три способа создания новых экземпляров
User
, но технически оно должно создавать их единообразно. - Я не всегда замечаю, когда методы и свойства моих моделей становятся недетерминированными, и когда они развивают побочные эффекты.
Вот простой пример. Сначала модель User
была такой:
class User(db.Models): def get_present_name(self): return self.name или "Anonymous" def enable(self): self.status = "activated" self.save()
Со временем это превратилось в это:
class User(db .Models): def get_present_name(self): # свойство стало недетерминированным с точки зрения базы данных # данные берутся из другого сервиса с помощью API return remote_api.request_user_name(self.uid) или "Анонимный" def активировать(self): # метод теперь имеет побочный эффект (отправить сообщение пользователю) /pre> Я хочу разделить сущности в своем коде:
- Сущности моей базы данных, уровень сохраняемости: какие данные хранит мое приложение?
- Сущности моего приложения, уровень бизнес-логики: Что делает мое приложение?
Каковы передовые методы реализации такого какой подход можно применить в Django?