Czy obecne dowody przemawiają za przyjęciem kontekstualnych modeli danych kanonicznych?


9

Idea „kanoniczna” jest wszechobecna w oprogramowaniu; wzory jak Canonical Modelu , Canonical Schema , Canonical Data Model i tak dalej, wydaje się pochodzić ponownie w rozwoju.

Jak wielu programistów, często bezkrytycznie podążałem za konwencjonalną mądrością, że potrzebujesz modelu kanonicznego, w przeciwnym razie spotkasz się z kombinatoryczną eksplozją twórców map i tłumaczy. A przynajmniej ja wykorzystane do zrobienia, że aż kilka lat temu, kiedy po raz pierwszy przeczytałem nieco-niesławny EF wotum nieufności :

Hipotezy, które kiedyś wspierały dążenie do kanonicznych modeli danych, nie obejmowały i nie mogły obejmować czynników, które zostaną odkryte po wdrożeniu pomysłu. Przez lata prób i błędów stwierdziliśmy, że stosowanie osobnych modeli dla każdego kontekstu, w którym można zastosować kanoniczny model danych, jest podejściem najmniej złożonym, podejściem najmniej kosztownym, a tym samym prowadzącym do większej łatwości konserwacji i rozszerzalności aplikacji i punktów końcowych za pomocą modeli kontekstowych, a podejście to nie zachęca do entropii oprogramowania, jaką robią modele kanoniczne.

Esej nie przedstawia żadnych dowodów na poparcie swoich twierdzeń, ale zmusił mnie do kwestionowania podejścia CDM wystarczająco długo, aby wypróbować alternatywę, a powstałe oprogramowanie nie wybuchło, dosłownie ani w przenośni. Ale to nie znaczy wiele w oderwaniu; Miałem szczęście.

Zastanawiam się więc, czy przeprowadzono jakieś poważne badania nad praktycznymi, długoterminowymi skutkami posiadania modelu kanonicznego w porównaniu z modelami kontekstowymi w systemie oprogramowania lub architekturze?

Lub, jeśli jest zbyt wcześnie, aby o to pytać, to czy programiści / architekci napisali o osobistych doświadczeniach zmieniających się z CDM na niezależne modele kontekstowe lub odwrotnie, i jakie praktyczne skutki wywarły na wydajności, złożoności lub niezawodności?

A co z różnicami na różnych poziomach, tj. Używaniem tego samego modelu w jednej aplikacji w porównaniu do używania go w systemie aplikacji lub w całym przedsiębiorstwie?

(Tylko fakty, proszę; historie wojenne są mile widziane, ale bez spekulacji.)


Nie mam pojęcia, o czym mówią w artykule „Głosowanie bez zaufania”. Reszta artykułu ma sens, ale sekcja o kanonice jest tak abstrakcyjna, że ​​nic nie znaczy. Byłoby miło, gdyby podali przykład tego, o czym mówili.
Robert Harvey

@Robert: Nie mam pojęcia, czy jest w tym jakaś prawda, ale jest dla mnie jasne, co to znaczy ... na pewno znasz wzorce CM / CDM? W najprostszym wcieleniu współużytkuje pojedynczy monolityczny model EF (lub Linq do SQL, lub cokolwiek innego) w całej aplikacji zamiast bardziej (postrzeganego) podejścia taśmowo-taśmowego polegającego na pisaniu określonych zapytań dla określonych części aplikacji. Na wyższym poziomie przyjmuje uniwersalny schemat dla całej organizacji, do którego muszą się tłumaczyć wszystkie poszczególne aplikacje / systemy.
Aaronaught

1
Brzmi to tak, jakby debata EF koncentrowała się na pierwszym planie tabeli w porównaniu z pierwszym modelem, ponieważ pierwszy projekt tabeli (gdzie klasy są generowane z tabel) sugeruje model monolityczny (chociaż zawsze istnieją wyspecjalizowane zapytania i widoki), podczas gdy projekt pierwszej klasy (gdzie tabele są generowane z klas) sugeruje bardziej elastyczny, elastyczny model OO. Jestem trochę staroświecki, preferuję podejście do stołu, ale widziałem, jak podejście do klasy byłoby dla niektórych atrakcyjne.
Robert Harvey

@Robert, nie miałem zamiaru przywoływać „debaty na temat EF”, po prostu wziąłem pojedynczy cytat z tej strony, ponieważ to tam po raz pierwszy usłyszałem argument (i nie jestem pewien, czy go słyszałem wyraźnie wyrażone gdzie indziej). Osobno nie jestem pewien, czy zgadzam się z tym, że pierwszy projekt tabeli reprezentuje model monolityczny; sama baza danych jest, ale tylko DBMS jest tego w pełni świadomy - różne części aplikacji mają tendencję do bycia świadomym tylko konkretnych tabel i zapytań, od których zależą.
Aaronaught 28.04.11

Odpowiedzi:


5

W odpowiedzi na artykuł EF Vote of No Confidence Tim Mallalieu pisze:

Nie zalecamy powrotu ludzi do czasów, w których ewangelizowaliśmy użycie XSD do „schematów kanonicznych”. Nie wierzę, że ludzie myślą, że jest to wykonalne. Uważamy jednak, że pożądane jest posiadanie jednego meta-modelu (EDM, jeśli chcesz), za pomocą którego można opisać wiele modeli domen oraz że dzięki jednej gramatyce możemy zapewnić zestaw wspólnych usług na dowolnym dany model domeny.

Rozważmy na przykład aplikację, która ma zostać napisana w bazie danych zawierającej 600 tabel. Czy uważam, że ta aplikacja powinna mieć jeden model z 600 typami jednostek? Nie… Ponadto, czy wierzę, że jakikolwiek podmiot domeny (powiedzmy Klient) ma tylko jeden kształt w tej aplikacji i że ten kształt musi być kanonicznym kształtem dla całego przedsiębiorstwa?… Nie.

Artykuł w Wikipedii na temat modelu kanonicznego odwołuje się do takich elementów, jak Enterprise Service Bus , architektura zorientowana na usługi i CORBA , rzeczy, o których wydaje się, że już prawie się o nich nie mówi. Wszystkie zostały uznane za rozwiązanie problemów związanych z rozprzestrzenianiem danych i komunikacją w przedsiębiorstwie, „ One Ring to Rule Them All”. TM Udało im się? A może upadli pod własnym ciężarem?


Prosiłeś o osobiste doświadczenia, więc dam ci jedno. W przemyśle lotniczym często używamy telemetrii. Jednym z wyzwań związanych z systemami telemetrycznymi jest znalezienie sposobu, aby różne zakresy testów komunikowały się między sobą w znaczący sposób. Ten problem wydaje się dość prosty, dopóki nie spróbujesz zdefiniować słownika danych z typowymi terminami.

Co oznacza „wysokość”? Czy jest to wysokość nad ziemią, czy też wysokość nad poziomem morza? Co jeśli mówisz o łodzi podwodnej? Potem jego głębokość, a nie wysokość. Dla wojska słowo „transmisja” ma inne znaczenie w odniesieniu do anteny radarowej niż do pojazdu naziemnego. Powierzchnia skrzydła, która powoduje obrót samolotu, na niektórych płaszczyznach nazywana jest „lotkami”, a na innych „wysokością”.

To tylko wskazówka na temat następnych problemów. Chociaż istnieją standardy transmisji danych, każdy zakres testowy jest inny i ma inne potrzeby, cele i priorytety. Standardy mogą się różnić nawet w przypadku różnych projektów w tym samym zakresie. Z tego powodu zakresy testowe rozumieją, że rozwiązanie nie przyjdzie, zastępując wszystko jednym, monolitycznym systemem, ale uzgadniając proste protokoły komunikacyjne i zapewniając sposoby tłumaczenia słownictwa z jednego zakresu na inny.


Problemy, przed którymi stoją duże firmy, są podobne. Microsoft zwykle myśli monolitycznie, ale to dlatego, że ich firma jest w zasadzie monolityczna. Gdy tylko będziesz musiał komunikować się między różnymi firmami o bardzo różnych kulturach i sposobach prowadzenia działalności gospodarczej (lub nawet między różnymi działami w tej samej firmie), One Ring to Rule Them All. TM natychmiast zaczyna się rozpadać.


Interesujące jest wiedzieć, że sami projektanci Microsoft nie zalecają udostępnionego mega-modelu; niestety tak właśnie jest używane Linq do SQL i EF i wielu innych ORM. Niezależnie od tego, wciąż jest wielu ludzi promujących koncepcję modelu kanonicznego i nadal chciałbym wiedzieć, jak radzi sobie w praktyce w porównaniu z alternatywą.
Aaronaught 28.04.11

@Aaronaught: Zobacz moją edycję.
Robert Harvey

To dobra edycja, a do twojej wiadomości zagłosowałem za nią. Jestem jednak świadomy wielu specyficznych problemów związanych z niezgodnością, które pojawiają się podczas próby kanonizacji modelu; Szczególnie interesuje mnie nauka o doświadczeniach lub długoterminowych danych o zespołach, które zainwestowały czas, aby rozwiązać te niezgodności, tak aby mieć jednego twórcę mapowania na punkt końcowy (end-to-model), a nie zainwestować czas w osobny koniec -to-mapujący zamiast tego, i które podejścia naprawdę przyniosły najniższe koszty / najniższą złożoność rozwiązań.
Aaronaught

Lub mówiąc bardziej zwięźle: wiem, że stworzenie i utrzymanie modelu kanonicznego wymaga dużo pracy, chcę wiedzieć, kiedy (jeśli w ogóle) zaobserwowane korzyści przeważą nad kosztami.
Aaronaught
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.