Czym, w odniesieniu do DDD, jest kontekst ograniczony?

40

Podczas pracy nad książką „Implementing Domain Driven Design” autorstwa Vaughna Vernona nie byłem w stanie dobrze zrozumieć, czym właściwie jest ograniczony kontekst.

Książka definiuje ograniczony kontekst jako „konceptualną granicę, w której ma zastosowanie model domeny. Zapewnia wszechobecny język, którym posługuje się zespół i który wyraża się w jego starannie zaprojektowanym modelu oprogramowania” (sekcja wstępna „Przewodnik po tej książce”). Ta definicja sprawiłaby, że brzmiałoby to tak, jakby kontekstem ograniczonym jest model i język subdomeny, gdzie ta subdomena może być domeną rdzeniową (co wydaje się, że powinna być nazywana „subdomeną rdzeniową”, ale to jest kolejna dyskusja ...). To wciąż pozostawia niejasności co do tego, co zapewnia ograniczony kontekst. Czy jest to grupa jednej lub więcej subdomen? Jeśli tylko jedna subdomena odpowiada ograniczonemu kontekstowi, co tak naprawdę mówi nam ten ograniczony kontekst?

Rozdział 3 tej samej książki odnosi się jednak do technik integracji między ograniczonymi kontekstami. Wydaje się to jednak sugerować, że ograniczone konteksty są w rzeczywistości systemami oprogramowania lub artefaktami o różnej różnorodności.

Martin Fowler krótko omawia ideę ograniczonego kontekstu ( http://martinfowler.com/bliki/BoundedContext.html ), ale tak naprawdę nie wyjaśnia problemu.

Na koniec, jaki jest kontekst ograniczony? Czy to grupa subdomen? Model i język subdomeny? Wdrożenie subdomeny? Bez tych odpowiedzi wydaje się raczej trudne do zrozumienia, jak rozłożyć rzeczywistą przestrzeń problemową na ograniczone konteksty.

Michał
źródło
2
Ten post tak naprawdę nie wyjaśnia definicji, przynajmniej dla mnie. Omawia ideę ograniczonych kontekstów, ponieważ mogą one mieć zastosowanie organizacyjne, ale tak naprawdę nigdy nie łączy tego z powrotem z rozwojem oprogramowania.
Michael
1
DOBRZE. Dobrze, choć nie jestem ekspertem DDD, znalazłem ten opis firmy Microsoft użytecznego (we wstępie pkt): msdn.microsoft.com/en-us/library/jj591572.aspx . Mówi: ...
Robert Harvey
1
Konteksty ograniczone to autonomiczne komponenty, z własnymi modelami domen i własnym, wszechobecnym językiem. Nie powinny mieć ze sobą żadnych zależności w czasie wykonywania i powinny być w stanie działać w izolacji. Są jednak częścią tego samego ogólnego systemu i muszą wymieniać dane ze sobą ...
Robert Harvey
1
... Jeśli implementujesz wzorzec CQRS w kontekście ograniczonym, powinieneś użyć zdarzeń dla tego typu komunikacji: twój ograniczony kontekst może reagować na zdarzenia podniesione poza ograniczonym kontekstem, a twój ograniczony kontekst może publikować zdarzenia, które inne konteksty ograniczone mogą się subskrybować. Zdarzenia, pozwalają zachować luźne połączenie między ograniczonymi kontekstami.
Robert Harvey

Odpowiedzi:

38

Ograniczone konteksty i poddomeny istnieją na różnych poziomach.

Subdomena to część przestrzeni problemu, jest to naturalny podział systemu, często odzwierciedla strukturę organizacji. Dlatego logistykę i operacje można oddzielić od fakturowania i fakturowania . Eric rozróżnia podstawowe , wspierające i ogólne poddomeny zgodnie z ich istotnością biznesową w danym scenariuszu.

Konteksty to fragmenty przestrzeni rozwiązań. To są modele . Dobrze byłoby mieć je, odzwierciedlając podział domen na subdomeny ... ale życie nie zawsze jest takie łatwe. Być może rozdęłaś starszą domenę obejmującą wszystko lub więcej kontekstu w tej samej subdomenie (tj. Stara starsza aplikacja, którą zastępuje aplikacja, którą ktoś buduje).

Aby mieć ograniczony kontekst , musisz mieć model i wyraźną granicę wokół niego. Dokładnie tego, czego brakuje w wielu aplikacjach opartych na danych, które korzystają z baz danych do udostępniania danych.

Inny - ortogonalny - sposób, aby to zobaczyć, może być następujący. Wszechobecny język , specjalny warunek, w którym każdy termin ma jedną jednoznaczną definicję, nie jest skalowany. Im bardziej ją powiększysz, tym bardziej wkrada się dwuznaczność. Jeśli chcesz osiągnąć precyzyjne, jednoznaczne modele, musisz wyraźnie określić ich granice i mówić wieloma małymi, wszechobecnymi językami, każdy w ramach jednego ograniczonego kontekstu, w ściśle określonym celu .

ZioBrando
źródło
1
Czy w idealnym świecie istniałaby relacja 1 do 1 między poddomenami a ograniczonymi kontekstami? (Zrozumienie, oczywiście, że to, co jest idealne, a co prawdziwe, różni się).
Michael
2
Niekoniecznie: najważniejsze jest to, że BC pokrywający się z wieloma subdomenami ma nieprzyjemny zapach. Cóż ... to nie jest ograniczone. W kategoriach DDD model powinien być idealnie dopasowany do jego celu, a różne poddomeny mają różne cele (i prawdopodobnie nawet różnych bossów o różnych celach). Ale w tej samej subdomenie może istnieć inny BC z różnych powodów. Mogą to być aplikacje internetowe i mobilne lub różne modele planowania lub wykonywania .
ZioBrando
Ale kluczową sprawą jest zrozumienie, że istnieją dwie rodziny problemów: 1) czytanie istniejącego kontekstu (w którym można akceptować i kategoryzować istniejące modele i współpracę), 2) projektowanie odpowiedniego oprogramowania z uwzględnieniem istniejących ograniczeń, nakładając w ten sposób granice kontekstu pomiędzy małymi, zorientowanymi na cel modelami. W drugim scenariuszu celowo nie nakładasz granic subdomen. ... ogólnie rzecz biorąc, szukanie idealnego oprogramowania w niedoskonałej organizacji może być trudne. Jednak rozwiązanie tych niespójności może być warte wysiłku.
ZioBrando
8

Techniki projektowania opartego na domenach pomagają nam tworzyć modele świata, w którym żyjemy. Modele te istnieją jako pomysły w umysłach osób zaangażowanych w projekt.

Ponieważ telepatia jest wciąż w powijakach, pomysły te są przekazywane między ludźmi za pomocą słów i zwrotów.

Słowa i wyrażenia mogą być dwuznaczne w najlepszych momentach. Aby pomóc nam zmniejszyć dwuznaczność, używamy „kontekstu”, aby wyjaśnić ich znaczenie.

Kiedy ludzie są głęboko zanurzeni w projekcie oprogramowania, który obejmuje lata, wydaje się, że zapominają kontekst, z którego pochodzą pomysły, które zamieniły się w słowa, które zamieniły się w nazwy zmiennych, które zostały upieczone w kodzie.

Nowicjusze przybywają do projektu i zaczynają korzystać z jego języka. Być może są to użytkownicy, a może deweloperzy. Jeśli nie zostanie im zapewniony kontekst, wymyślą własny kontekst (a zatem znaczenie) z własnego doświadczenia życiowego.

Ten nowo zastosowany kontekst pokaże, jak nowi programiści dokonują refaktoryzacji lub opracowują kod. Jeśli zastosują niewłaściwy kontekst, dokonają refaktoryzacji i opracują kod w, być może bardzo nieznacznie, niewłaściwym kierunku. Niewłaściwe kierunki, choć niewielkie, mogą powodować znacznie większe problemy w dalszej linii.

Moim zdaniem „kontekst ograniczony” jest po prostu „kontekstem wyjaśnionym”, który jest przekazywany początkującym projektantom, aby nie stosowali własnego kontekstu w celu skażenia naszego, pięknie szlifowanego modelu.

Jest to wyraźne potwierdzenie przez zespół, że this phrasew this part of the projectsensie dokładnie this thing(a nie, jak mogłoby się wydawać, that thing).

Tak jak dobrze jest wyznaczyć granice między ogrodem a ogrodem sąsiada. Granicę określasz wyraźnie, abyś nie złościł się, gdy zaczną kopać kwietnik na idealnie wypielęgnowanym trawniku.

To jest to. To bardzo prosty pomysł, który jest tak ważny, że napisano o nim wiele.

Więc tak. Kontekst ograniczony jest dosłownie granicą, „ogrodzeniem”, która odróżnia kontekst jednej subdomeny od kontekstu innej subdomeny w projekcie.

Model i język subdomeny są odizolowane od innych modeli i języków, aby uniknąć dwuznaczności w znaczeniu.

Ale tak. Świat nie jest taki prosty.

Ty i zespół musicie być rygorystyczni w przestrzeganiu określonego kontekstu. Bardzo łatwo jest być leniwym i ponownie wyobrazić sobie kontekst, w którym można skracać rogi podczas tworzenia oprogramowania.

Ponadto rzeczy wchodzą w interakcje z innymi rzeczami, a ograniczone konteksty również muszą oddziaływać ze sobą. Istnieją więc różne wzorce opisujące, w jaki sposób zachodzą te interakcje. Zobacz Erica Evana w książce Domain Driven Design Rozdział 14 na temat tych różnych wzorców: wspólne jądro, dostawca klienta, konformista, warstwa antykorupcyjna, oddzielne sposoby, otwarta usługa hosta, język publikowany.

JW01
źródło
1
W zasadzie jest to ogrodzenie wokół subdomeny.
Robert Harvey
1
Tak. O ile mogę to zobaczyć. To płot.
JW01
0

Zasadniczo kontekst Bounded określa pewne namacalne granice zastosowania niektórych subdomen. Jest to jakiś abstrakcyjny obszar, w którym pewna poddomena ma sens, a inne nie. Może to być rozmowa, prezentacja, projekt kodu z fizycznymi granicami określonymi przez artefakt.

W różnych sytuacjach używam trzech różnych perspektyw lub metafor koncepcji Bounded Context.

Z perspektywy czasu reprezentuje logiczne granice, zdefiniowane umową usługi, w której model jest implementowany. Umowa może być reprezentowana jako interfejs API tej usługi lub zestaw zdarzeń, które publikuje i wykorzystuje. Tak więc z tej perspektywy Ograniczony kontekst nie ma nic wspólnego z fizycznymi granicami.

Z perspektywy eksperta w dziedzinie ograniczony kontekst jest obszarem, w którym wdrażane są pewne procesy biznesowe, stosowany jest pewien wszechobecny język, a niektóre terminy mają wyraźny sens, podczas gdy inne nie. To tylko prostokąt narysowany na kartce papieru lub tablicy.

Dla programisty, tj. Z perspektywy kodu statycznego, ograniczony kontekst reprezentuje sposób, w jaki projektowałem moje modele wokół odpowiednich subdomen. Z iloma bazami kodowymi konkretna subdomena jest zaimplementowana? Z czego składają się pojęcia? Jakie koncepcje mają zastosowanie w każdej z nich? Dlatego mówi się, że ograniczone konteksty należą do przestrzeni rozwiązań.

Bardzo podoba mi się ten przykład koncepcji Bounded Context.

Kolejnym ważnym pytaniem (jeśli nie najważniejszym) jest to, jak rozpoznać ograniczone konteksty . Jeśli zrobisz to niepoprawnie, skończysz z gadatliwymi, niemożliwymi do utrzymania i ściśle powiązanymi usługami , znanymi również jako rozproszony monolit .

Zapadło
źródło