Marcin Markowski - 06.06.2019

Nowy projekt Open Source
DDD-starter-dotnet

W DDD najważniejsze jest oczywiście poznanie naszej domeny, zbudowanie Ubiquitous Language i Modelu wiernie odzwierciedlającego biznes. Na koniec dnia trzeba jednak ubrać to w kod. Ten projekt jest ilustracją różnych podejść do implementacji wzorców znanych z DDD i nie tylko.

Zapraszamy na nasz GitHub

Już teraz zapraszamy na stronę projektu: https://github.com/itlibrium/DDD-starter-dotnet

Znajdziecie tam implementację projektów i namespace'ów przedstawioną w poprzednim artykule. Już niedługo przygotowana struktura solution wypełni się przykładami implementacji poszczególnych komponentów.

O projekcie

Czym jest ten projekt?

  1. Miejscem do uczenia się technik implementacji przydatnych w takich koncepcjach jak: DDD, CQRS, Event Sourcing, Hexagonal Architecture, BDD, etc.
  2. Porównaniem różnych stylów implementacji
  3. Zestawem gotowych rozwiązań, które mogą zostać wykorzystane w Waszych projektach

Czym nie jest ten projekt?

  1. Kompletną implementacją jakiejś domeny
  2. Ilustracją procesu odkrywania wiedzy domenowej i modelowania
  3. Kompletnym porównaniem wszystkich możliwych podejść do implementacji

Cel

Podstawowym celem projektu jest pokazanie różnych podejść do implementacji i wydestylowanie najlepszych praktyk w każdym z nich. To, które podejście będzie optymalne w konkretnym przypadku, zależy oczywiście od kontekstu.

Nasze podejście

Ograniczenie domeny do minimum

Przedstawienie jednocześnie procesu poznawania i modelowania domeny oraz różnych podejść do implementacji jest niepraktyczne. Dlatego zdecydowaliśmy się ograniczyć domenę to absolutnego minimum, żeby móc wyeksponować techniki implementacji poszczególnych wzorców.

Ograniczenie to będzie dotyczyło przede wszystkim ilości koncepcji domenowych, a w mniejszym stopniu ich złożoności, gdyż ta jest konieczna do sensownego użycia prezentowanych wzorców.

Wszystkich zainteresowanych poznawaniem domeny, technikami takimi jak Event Storming, czy kompletną implementacją domeny odsyłamy do innych projektów np: https://github.com/ddd-by-examples

Prostota

Kod czyta się o wiele częściej niż się go modyfikuje. Implementacja powinna więc być przede wszystkim zoptymalizowana pod kątem czytelności. Ponadto kod zwykle czyta kto inny niż jego autor, warto więc zadbać, aby krzywa uczenia była jak najmniej stroma.

Postaramy się aby wszystkie przedstawione rozwiązania były tak proste jak to możliwe. Różne warianty będą oczywiście różniły się złożonością. Będzie to dodatkowa ilustracja kompromisów pomiędzy zwięzłością a prostotą: co się zyskuje, a co się traci wybierając bardziej generyczne / automatyczne / magiczne rozwiązania.

Prostota nie oznacza jednak uproszczeń, których będziemy się starali unikać za wszelką cenę. Uproszczone rozwiązania najczęściej nie nadają się do wykorzystania w realnym projekcie. Wymagają one również dodatkowej wiedzy, żeby odróżnić to co istotne od tego, co jest jedynie uproszczeniem.

Minimum zależności technicznych

Omawiane wzorce nie są ściśle związane z żadną technologią, dlatego projekt nie będzie pisany z perspektywy jakiegoś konkretnego zestawu technologii, czy dostawcy chmury.

Jedynym ograniczeniem jest wybór platformy .net i języka C#.

Wybrane dodatkowe biblioteki i technologie są optymalnymi wyborami z perspektywy doświadczenia autorów. W innych kontekstach inne wybory mogą okazać się lepsze.

Wszystkie wykorzystane biblioteki i technologie mogą być łatwo zastąpione analogicznymi rozwiązaniami przy zachowaniu istoty implementowanych wzorców.

Rozwój projektu

Projekt będzie rozwijany etapami więc zachęcamy do obserwowania:

  1. Kodu: https://github.com/itlibrium/DDD-starter-dotnet
  2. Bloga: https://itlibrium.com/blog?tag=DDD-starter
  3. Twittera: ITLIBRIUM, Marcin, Szymon

Jeśli podoba się Wam nasz pomysł na projekt lub jest coś co chcielibyście w nim zobaczyć dajcie znać w komentarzach. Ucieszymy się również z każdej gwiazdki na github 😉


Marcin Markowski

Zdjęcie Marcin Markowski
Trener

Architekt, trener, zwolennik podejścia Software Craftsmanship i ścisłej współpracy z biznesem. Specjalizuje się w modelowaniu opartym o Domain Driven Design i projektowaniu architektury systemów.

Zaczynał od consultingu biznesowego, później przeszedł do IT. Pracował zarówno nad systemami „enterprise”, jak i tworzył od podstaw rozwiązania dla małych firm. Próbował wejść w świat startupów z własnym produktem. Ostatecznie został jednak w IT, gdzie działa jako konsultant i trener.