Сьогодні я вступив у бурхливу дискусію з іншим розробником моєї організації про те, де і як додати методи до класів, зіставлених на базі даних. Ми використовуємо sqlalchemy
, і основна частина наявної кодової бази в наших моделях баз даних - це трохи більше, ніж мішок відображених властивостей з назвою класу, майже механічним перекладом з таблиць баз даних на об'єкти python.
В аргументі моя позиція полягала в тому, що основне значення використання ORM полягало в тому, що ви можете приєднувати поведінку та алгоритми низького рівня до відображених класів. Моделі - це класи, по-друге, стійкі (вони можуть бути стійкими, використовуючи xml у файловій системі, вам не потрібно дбати). Його думка полягала в тому, що будь-яка поведінка взагалі є "діловою логікою" і обов'язково належить де завгодно, окрім стійкої моделі, яка повинна використовуватися лише для збереження бази даних.
Я, звичайно, думаю, що існує різниця між тим, що є бізнес-логікою, і її слід відокремлювати, оскільки вона має певну ізоляцію від нижчого рівня того, як це реалізується, і логікою домену, що, на мою думку, є абстракцією, наданою модельними класами. сперечався в попередньому абзаці, але мені важко класти палець на те, що це таке. Я краще розумію, що може бути API (який у нашому випадку є HTTP "ReSTful"), оскільки користувачі посилаються на API, що вони хочуть робити , відмінні від того, що їм дозволено робити та як це робити закінчується.
tl; dr: Які речі можуть або повинні бути використані методом у картографованому класі при використанні ORM, а що слід залишати, щоб жити в іншому шарі абстракції?