Dzisiaj wdałem się w gorącą debatę z innym programistą w mojej organizacji na temat tego, gdzie i jak dodawać metody do klas odwzorowanych w bazie danych. Używamy sqlalchemy
i główna część istniejącej bazy kodu w naszych modelach baz danych to niewiele więcej niż worek mapowanych właściwości o nazwie klasy, prawie mechaniczne tłumaczenie z tabel bazy danych na obiekty python.
W moim argumencie moja pozycja była taka, że podstawową wartością użycia ORM było to, że możesz dołączyć zachowania i algorytmy niskiego poziomu do mapowanych klas. Modele są najpierw klasami, a następnie trwałymi (mogą być trwałe przy użyciu xml w systemie plików, nie musisz się tym przejmować). Jego zdaniem każde zachowanie jest „logiką biznesową” i koniecznie należy do dowolnego miejsca, ale nie w modelu trwałym, który ma być używany tylko do trwałości bazy danych.
I na pewno sądzę, że istnieje różnica między tym, co jest logika biznesowa i powinny być rozdzielone, ponieważ ma jakąś izolację od niższego poziomu, jak to zostanie zrealizowane, a logika domeny, które wierzę, jest abstrakcją dostarczone przez klasach modelowych spierałem się w poprzednim akapicie, ale ciężko mi wskazać, co to jest. Mam lepsze pojęcie o tym, co może być interfejsem API (którym w naszym przypadku jest HTTP „ReSTful”), ponieważ użytkownicy wywołują interfejs API z tym, co chcą robić , niezależnie od tego, co wolno im robić i jak to zrobić robi się.
tl; dr: Jakie rzeczy mogą lub powinny iść w metodzie klasy odwzorowanej przy użyciu ORM i co należy pominąć, aby żyć w innej warstwie abstrakcji?