Сегодня я вступил в жаркую дискуссию с другим разработчиком в моей организации о том, где и как добавлять методы в классы с отображением базы данных. Мы используем sqlalchemy
, и основная часть существующей кодовой базы в наших моделях баз данных - это всего лишь пакет сопоставленных свойств с именем класса, почти механический перевод из таблиц базы данных в объекты Python.
В этом аргументе моя позиция заключалась в том, что основной ценностью использования ORM было то, что вы можете присоединять низкоуровневые поведения и алгоритмы к отображаемым классам. Модели - это, во-первых, классы, и, во-вторых, постоянные (они могут быть постоянными при использовании xml в файловой системе, вам не нужно заботиться). Он считал, что любое поведение вообще является «бизнес-логикой» и обязательно принадлежит где угодно, кроме постоянной модели, которая должна использоваться только для сохранения базы данных.
Я, конечно, думаю, что существует различие между тем, что является бизнес-логикой, и ее следует отделить, поскольку она имеет некоторую изоляцию от нижнего уровня того, как это реализуется, и предметной логикой, которая, как я считаю, является абстракцией, предоставляемой модельными классами. об этом спорили в предыдущем абзаце, но мне трудно разобраться, что это такое. У меня есть лучшее представление о том, каким может быть API (в нашем случае это HTTP «ReSTful»), в котором пользователи вызывают API с тем, что они хотят делать , в отличие от того, что им разрешено делать, и как это происходит. сделано
tl; dr: Какие вещи могут или должны идти в методе в отображаемом классе при использовании ORM, и что следует исключить, чтобы жить на другом уровне абстракции?