Waszą naczelną zasadą powinno być: Nie powtarzaj się :
W inżynierii oprogramowania Don't Repeat Yourself (DRY) to zasada opracowywania oprogramowania mająca na celu ograniczenie powtarzania wszelkiego rodzaju informacji, szczególnie przydatna w architekturach wielowarstwowych. Zasada DRY jest określona jako „Każda wiedza musi mieć jedną, jednoznaczną, autorytatywną reprezentację w systemie”.
ORM jest zasadniczo dodatkową warstwą (lub warstwą, jeśli wolisz), wygodnie leżącą między aplikacją a magazynami danych. Ograniczenia powinny znajdować się w jednym miejscu i tylko w jednym, niezależnie od tego, czy będzie to ORM, czy przechowywanie danych, w przeciwnym razie wkrótce skończysz utrzymywać różne ich wersje. Ty naprawdę nie chcesz tego robić.
Jednak w praktyce większość pół przyzwoitych ORM automatycznie generuje dużą liczbę modeli na podstawie schematu danych. Mimo że nadal występuje powielanie, szanse na piekło utrzymania są minimalne, ponieważ za każdym razem generowany jest zduplikowany kod ORM. Idealnie byłoby nie mieć zduplikowanego kodu, ale kolejna najlepsza rzecz to automatycznie generowane ograniczenia.
Ponadto posiadanie ograniczeń w jednym miejscu niekoniecznie oznacza, że powinieneś mieć wszystkie ograniczenia w tym samym miejscu. Niektóre, takie jak referencyjne ograniczenia integralności, mogą lepiej pasować do przechowywania danych (ale mogą zostać utracone, jeśli przejdziesz do innego magazynu danych), a niektóre, w większości te dotyczące skomplikowanej logiki biznesowej, lepiej pasują do Twojego ORM. Lepiej byłoby mieć wszystkie jabłka w tym samym koszu, ale…
Awarie
Wspominasz o niepowodzeniu ORM. Jest to absolutnie nieistotne dla twojego pytania, twoja aplikacja powinna traktować ORM i przechowywanie danych jako jeden podmiot. Jeśli zawiedzie, nie powiedzie się, ominięcie ORM w celu bezpośredniego połączenia z pamięcią danych nie jest dobrym pomysłem.
Omijanie ORM dla czegokolwiek innego
Również nie jest to dobry pomysł. Może się to jednak zdarzyć z różnych powodów:
Starsze części aplikacji, które zostały zbudowane przed wprowadzeniem ORM.
To jest trudne i dokładnie taka sytuacja mam teraz do czynienia , stąd moje ciągłe powtarzanie „utrzymania piekła”. Albo utrzymujesz części inne niż ORM, albo przepisujesz je, aby użyć ORM. Druga opcja może początkowo mieć większy sens, ale jest to decyzja oparta wyłącznie na tym, co dokładnie robią te części aplikacji i na ile wartościowe byłoby całkowite przepisanie na dłuższą metę.
Spróbuj zmienić klucz w źle zaprojektowanej tabeli MySQL 2 * 10 ^ 8 wierszy (bez przestojów), a zrozumiesz, skąd pochodzę.
Nietypowe części aplikacji, które absolutnie muszą bezpośrednio komunikować się z przechowywaniem danych:
Jeszcze trudniejsze. ORM to wymyślne narzędzia, które zajmują się prawie wszystkim, ale czasem przeszkadzają, a nawet są absolutnie bezużyteczne. Modne hasło (tak naprawdę buzzphrase) to niedopasowanie impedancji obiektowo-relacyjnej , po prostu mówiąc, ORM nie jest technicznie możliwe do zrobienia wszystkiego , co robi relacyjna baza danych, a dla niektórych rzeczy, które robią, istnieje znaczna obniżka wydajności.
Komentarze
Z punktu widzenia integralności danych ograniczenia MUSZĄ znajdować się w bazie danych, a POWINIEN być w aplikacji. Co się stanie, jeśli aplikacja jest dostępna za pośrednictwem Internetu i aplikacji komputerowych, aplikacji mobilnej lub usługi internetowej? - Luiz Damim
W tym przypadku dodanie dodatkowej warstwy byłoby niezwykle pomocne, a jeśli mówimy o aplikacji internetowej, wybrałbym interfejs API REST. Zbyt uproszczonym projektem byłoby:
ORM będzie znajdować się między interfejsem API a magazynami danych, a wszystko, co kryje się za interfejsem API (łącznie z nim), będzie uważane za jedną całość z różnych aplikacji.