Posts tagged DDDSample

DDDSample.Net news

Quite a lot have happened since last DDDSample.Net information was published here. Version 0.8 was released on April 18. This is the most recent binary release of the project. It focuses on the concept of model layers which were introduced in a separate code branch.

On April 30 another branch — AutoPersistence – was added. AutoPersistence is a concept-proof exploring the possibilities of inferring persistence mapping from the model. AP uses slightly modified version of FluentNHibernate to achieve this goal. This version is currently available only in trunk.

The most recent change is a redesign of Handling aggregate in Vanilla version of DDDSample. The new design is now more aligned with book and original Java-based project.

Stay tuned!

VN:F [1.8.7_1070]
Rating: 0.0/5 (0 votes cast)

Automatic domain model persistence – halfway through

Just a quick note. There was no new post yesterday because I was busy implementing automatic persistence for domain model concept-proof. In the previous post I was writing about private field automapping. Since then I managed to implement a bunch of other concepts, including composite elements.

My fork of FluentNHibernate (automapping-fields branch) on github was updated with the most current code version.

DDDSample.NET ‘AutoPersistence’ branch uses the modified FNH to persists its domain model and it works! Without a single mapping file!

So, if everything works fine, why ‘halfway through’? That is because the code is very, very dirty and needs much work before it can be used in production.

VN:F [1.8.7_1070]
Rating: 0.0/5 (0 votes cast)

DDDSample 0.7

0.7 release of DDDSample is there. Go, download it, and say if you like it. There are now really five different versions in the package:

  • Classic with synchronous communication
  • Classic with asynchronous communication via NServiceBus (these two can be switched using compilation target)
  • CQRS using two NHibernate relational sores
  • CQRS using with relational store based on LINQ 2 SQL (not available as binary installation package, only in trunk)
  • Event Sourcing with CQRS

I really would like to hear you opinions on where the project should go now? Do you think it is finished and contains all the things it should contains? What needs to be done? What should be done first?

Installation is dead-simple when using default SQLite database, so don’t be afraid. If you have any problems, feel free to contact me via e-mail or twitter.

VN:F [1.8.7_1070]
Rating: 5.0/5 (1 vote cast)

Raportowanie a CQRS

Zdaję sobie sprawę, że tytuł jest ogromnym skrótem myślowym. Tak naprawdę chodzi mi o możliwość generowania raportów z rozwiązań wykorzystujących model domeny z CQRS. Oczywiście, posłużę się przykładem DDDSample. Na wstępnie jednak muszę się przyznać, że nie jestem ekspertem od business intelligence, więc jeśli popełniłem jakieś karygodne wykroczenia, proszę o wyrozumiałość i zgłoszenie poprawek w komentarzach — będę wdzięczny za wszelkie uwagi.

Problem wygląda następująco: nasz system transakcyjny działa świetnie, jest wydajny, bezpieczny itp. Nadszedł jednak czas, aby wygenerować z niego jakiś raport potwierdzający, że system się sprawdza biznesowo. Jak to zrobić, mając po stronie komend silnie znormalizowaną bazę zoptymalizowaną dla operacji update/insert, a po stronie zapytań — tabele odzwierciedlające formatki UI? Są dwie możliwości:

  1. Zmodyfikować bazę strony zapytań, aby stała się prawdziwą “bazą raportową”. Dzięki temu będzie mogła służyć i do generowania raportów i do wyświetlania danych na formatki. Niestety konsekwencją tego jest znaczne zwiększenie skomplikowania kodu dostępu do danych dla formularzy i list. Dlaczego? Zaraz zobaczymy.
  2. Dodać kolejną (3!) bazę danych zoptymalizowaną pod kątem raportów. Minusem jest, jak zwykle, zwiększony wysiłek ze strony administratorów. Plus (również jak zwykle): lepszy podział odpowiedzialności i możliwość optymalizacji.

Spróbujmy więc zrealizować to drugie rozwiązanie. Na początek potrzebujemy struktury bazodanowej, która nadawałaby się do generowania raportów. Oczywiście, w rzeczywistej sytuacji zapytalibyśmy naszego klienta, jakich raportów potrzebuje. Niestety nie mam takiej możliwości pisząc te notkę. Przygotowałem więc schemat, który wydaje mi się użyteczny:

Pozwala on na analizę towarów pod kątem zmian rzeczywistej trasy w stosunku do tej zarejestrowanej i ich wpływu na dostarczenie towaru. Z drugiej strony umożliwia także analizę samych tras: którędy prowadziła, czy wynikiem było złe skierowanie towaru, czy została porzucona (zmieniona), czy też w wyniku jej realizacji towar został dostarczony.

Na pierwszy rzut oka widać, że transformacja tak przechowywanych danych do formatu niezbędnego do wyświetlenie na formatkach byłoby bardzo trudna. Utwierdza mnie to w przekonaniu, że (tym razem) słusznie wybrałem wariant drugi (osobne bazy).

Mając już strukturę danych, zastanówmy się, czego potrzebujemy, aby ją zasilić? Z pomocą przychodzi nam naturalna właściwość tego rodzaj systemów CQRS. Są one naturalnie przystosowane do scenariuszy real-time business intelligence, ponieważ posiadają wbudowany mechanizm wypychania danych z bazy transakcyjnej w czasie rzeczywistym (służący do zasilania bazy dla zapytań). Możemy się więc w niego bezwstydnie wpiąć. Potrzebujemy jedynie czterech obiektów obsługi komunikatów dla zdarzeń:

  • zarejestrowano towar (utworzenie obiektu w CargoFacts i RouteFacts)
  • przypisano trasę (aktualizacja RouteFacts)
  • zmieniono lokalizację docelową (utworzenie obiektu w RouteFacts, modyfikacja reprezentującego poprzednią trasę)
  • zarejestrowano zdarzenie obsługi (aktualizacja rzeczywistego miejsca załadunku towaru i miejsca dostarczenia towaru, aktualizacja pola “misdirected” itp.)

Implementacje możemy wykonać (znów) na dwa sposoby: albo bezpośrednio przygotowując odpowiednie komendy SQL, albo mapując przedstawiony model na obiekty. Co kto woli.

PS. Zamierzam spróbować zaimplementować przedstawione rozwiązanie. Jak tylko mi się uda, podzielę się z Wami wynikami eksperymentu.

VN:F [1.8.7_1070]
Rating: 0.0/5 (0 votes cast)

DDDSample documentation update

I have just published some new documentation pages on DDDSample.Net CodePlex site. You can now read about Domain-Driven Design elements in context of class diagrams, compare CQRS approach to the classic one and read on how Event Sourcing influences the model.

VN:F [1.8.7_1070]
Rating: 5.0/5 (1 vote cast)