Подтвердить что ты не робот

Развязка классов домена из классов Django Model

Итак, я завершил анализ OO и дизайн веб-приложения, которое я создаю, и теперь я вхожу в реализацию. Были приняты конструктивные решения для внедрения системы с использованием Python и структуры веб-разработки Django.

Я хочу начать реализацию некоторых классов объектов домена, которые нуждаются в постоянстве. Похоже, что Django предложит мне реализовать их как классы, которые унаследованы от класса моделей Django, чтобы использовать ORG Django для сохранения. Однако это кажется слишком сильной связью между моими классами и механизмом персистентности. Что произойдет, если на каком-то этапе я захочу портить Django и использовать другую инфраструктуру веб-разработки или просто канаву Djangos ORM для альтернативы? Теперь мне нужно перезаписать классы сущности домена с нуля.

Таким образом, было бы лучше реализовать мои классы домена как самостоятельные классы Python, инкапсулировать всю мою бизнес-логику в них, а затем использовать какой-то механизм (шаблон проектирования, такой как мост или адаптер или?), чтобы делегировать хранение настойчивости этих классов домена в ORM Django, например, через класс модели Django, который был соответствующим образом настроен для этого.

Есть ли у кого-нибудь предложение о том, как это сделать? Кажется, из всего, что я прочитал, люди просто реализуют свои классы домена как классы, унаследованные от класса модели Django, и смешивают бизнес-логику внутри этого класса. Это не кажется хорошей идеей для изменения линии вниз, обслуживания, повторного использования и т.д.

4b9b3361

Ответ 1

Можете ли вы серьезно предусмотреть возможность того, что вы собираетесь просто спустить Django ORM, но сохранить все остальное? Или что если вы полностью отбросили Django, любой из ваших кодов все еще будет применим?

Вы не жалуетесь, что если вы отбросили Django, вам придется переписать все ваши шаблоны. Конечно, вы это ожидаете. Итак, почему это нормально для того, чтобы уровень представления был связан с каркасом, но не с уровнем сохранения?

Этот вид передового анализа, которого следует избегать. Django - это инструмент RAD, который лучше всего подходит для быстрой итеративной разработки. При всем этом он способен создавать некоторые мощные, долгоживущие приложения, о чем свидетельствуют многие крупные компании. Но это не Java, и это не "предприятие", и оно не очень хорошо соответствует принципам OO. В мире Python это рассматривается как функция, а не ошибка.

Ответ 2

Ну, путь к Django - это наследование классов базовой модели Django. Это шаблон "активной записи". Ваши модели django будут иметь все CRUD и методы запроса вместе с вашей бизнес-логикой (если вы решите добавить его, конечно). Это рассматривается как анти-шаблон в java-мире, но крутая вещь в том, что он может ускорить разработку действительно очень быстро.

Ответ 3

Вам не придется "переписывать свои модели с нуля", если вам нужен другой механизм сохранения. Весь смысл системы сохранения в стиле activerecord заключается в том, что она налагает минимальные ограничения на классы моделей и действует в значительной степени прозрачно.

Если вы действительно волнуетесь, отвлеките любой код, который полагается на запросы, в свои собственные методы.

Ответ 4

Я думаю, что не было реализовано решение для развязки моделей Django и классов домена, по крайней мере, я их не нашел. Фактически, единственная ORM с такой развязкой, которую я знаю, существует только в мире Smalltalk, и она называется GLORP. Это позволяет вам сохранить вашу модель домена в реляционной БД без необходимости изменять классы домена. В настоящее время я пытаюсь реализовать аналогичные идеи для развязки с Django ORM. Моя мотивация заключается в том, что текущая сильная связь между таблицами БД и классами доменов сильно вредит разработке программного обеспечения. Я отправлю сообщение, если мне удастся:)