Witam,
w pracy mamy dyskusję nad sensem wydzielania kodu ORM do współdzielonej paczki. Chodzi o encje + ich konfiguracje w Entity Frameworku.
Mamy dwie aplikacje pracujące na tej samej bazie danych, potencjalnie mogą się pojawić kolejne. Padł pomysł, żeby zamiast tworzyć mapowania ORM w każdym projekcie osobno, utworzyć paczkę, którą będziemy zaciągali w innych projektach.
Argumenty za:
- nie trzeba pisać dwa razy tego samego kodu
- tworząc nowy projekt od razu zaciągamy sobie wszystkie encje i na nich operujemy
- w przypadku zmian na bazie, poprawiamy w jednym miejscu, a w reszcie projektów sobie zaciągamy paczkę
- w przypadku migracji do wyższej wersji ORM, podbijamy wersję ORM w współdzielonej paczce, a w innych projektach tylko zaciągamy zmiany
Argument przeciw:
- problemy wynikające z jednoczesnej zmiany w dwóch aplikacjach, zmieniam coś w aplikacji A, kolega zmienia coś w aplikacji B. Musimy odpowiednio wersjonować paczkę, tak żeby nie blokować się wzajemnie, że nie można puścić aplikacji A, bo B jeszcze nie jest gotowa.
- częściowa utrata kontroli w projekcie nad warstwą dostępu do danych - chcę dodać jakąś encje, czy specyficzny konstruktor w danej encji i nie mogę tego zrobić w projekcie, tylko muszę stworzyć nową wersję paczki, a następnie zaktualizować ją w projekcie.
- podbicie zależności ORM w ramach współdzielonej paczki wymusza podbicie tej zależności w projektach zaciągających paczkę. Czyli wymuszona migracja do wyższej wersji.
W ogóle myślę, że kilka aplikacji robiących zmiany na tych samych tabelach w bazie to proszenie się o kłopot, bo sprowadza się to do stworzenia rozproszonego monolitu.
Jakie jest Wasze zdanie?