Domain Driven Design – Usługi

Jesteśmy dokładnie w połowie drogi przez elementy modelu Domain Driven Design. Poznałeś już Encje i Obiekty wartości, dzisiaj opowiem Ci coś więcej o usługach. Dowiesz czym są i za co odpowiadają usługi oraz nauczysz się jak je rozpoznawać. 

Czym są Usługi?

Usługi to klasy, które są odpowiedzialne za znaczące procesy biznesowe, których nie da się naturalnie przypisać do encji lub wartości. Są one bezstanowe. Odpowiadają jedynie za przeprowadzenie procesu, otrzymując na wejście oraz zwracając jedynie obiekty modelu dziedziny. Poprawnie stworzona usługa powinna zawierać trzy cechy:

  • operacja, za którą odpowiedzialna jest usługa jest bezstanowa.
  • interfejs usługi jest zdefiniowany na takich samych warunkach, jak język modelu.
  • nazwa stanowi część języka wszechobecnego.

Podczas przebiegu procesu powinien on korzystać jedynie z danych globalnych lub bezpośrednio przekazanych do procesu. Może zmieniać te dane. Usługi mogą wywoływać efekty ubocze w przeciwieństwie do wartości. DDD zaleca, aby każda usługa miała interfejs i z jego użyciem komunikowała się z resztą systemu.

Jak rozpoznać usługę?

W przypadkach, gdy programista ma wątpliwości czy dane pojęcie będzie usługą, czy odpowiedzialnością encji, powinien się zastanowić, ile ma źródeł danych w procesie i ilu encji się one tyczą. Gdy proces opiera się na danych z dwóch lub więcej encji albo logika biznesowa oraz język wszechobecny podpowiadają, że dany proces jest operacją na więcej niż jednym elemencie modelu, to proces będzie usługą. Podobnie w przypadku, gdy dany proces pojęciowo nie opiera się na żadnym z elementów modelu, ale zawiera w sobie logikę biznesową.

Usługi występują w różnych warstwach aplikacji. Często ciężko jest programiście odróżnić, które należą do której warstwy. W przypadku DDD usługi powinny być implementowane w taki sposób, aby granice warstw były wyraźnie wyznaczone. Procesy, które opierają się na logice biznesowej, działają na elementach modelu dziedziny, będą usługami dziedzinowymi. Gdy dane do procesu są globalne i nie opierają się na elementach modelu dziedzinowego, będą należeć do warstwy aplikacji lub infrastruktury.

Mam nadzieje, że po tym niedługim ale treściwym tekście rozumiesz ideę usług w modelu dziedziny. Jeśli masz jakieś pytania napisz w komentarzu lub przez Facebooka. Na wszystkie postaram się odpowiedzieć.

Podobne posty

Jestem programistką, która lubi mieć ręce pełne roboty. Do życia potrzebuje komputera z internetem i kubka gorącej kawy. Więcej na stronie o mnie.

Comments

ZOSTAW ODPOWIEDŹ

Please enter your comment!
Please enter your name here