Projektowanie skalowalnych architektur z wykorzystaniem zaawansowanych technik DDD Michał Mac macmichal.pl
Michał Mac Architekt, konsultant | macmichal.pl Kontakt z prelegentem
Po sesji będziesz Wiedział\a jak projektować autonomiczne komponenty. Znał\a sposoby luźnego ich wiązania. Cel sesji
DDD book
Oprogramowanie modułowe. Czym jest Bounded Context? Zaawansowane techniki DDD łączenia BC. Plan prezentacji
Modularność
Projekt systemu Projekt
Czym jest produkt?
Projekt systemu Projekt
Projekt systemu
Wytyczona aplikowalność konkretnego modelu. BOUNDING CONTEXTS dają członkom zespołów jasne i spójne zrozumienie tego co musi być wspólne, a tego co może rozwijać się niezależnie od siebie. Bounded Context
DEMO Bounded Contexts
BC - komórki
Integracja BC
Jeśli klient w module CRM zostanie oznaczony jako VIP to nadaj rabat jego wszystkich niezatwierdzonym zamówieniom. Scenariusz
Interakcja CRM Bounded ContextSales Bounded Context
Interakcja CRM Bounded ContextSales Bounded Context
Interakcja CRM Bounded ContextSales Bounded Context EventBroker
public interface IDomainEventPublisher { void Publish (T domainEvent) where T : IDomainEvent; } EventBroker
public interface IDomainEventPublisher { void Publish (T domainEvent) where T : IDomainEvent; } public interface IEventSubscriber { void Subscribe(IEventListener listener); void Unsubscribe(IEventListener listener); } EventBroker
public interface IEventListener { } public interface IEventListener : IEventListener { void Handle(TEvent eventData); } EventBroker
DEMO Domain Events
Jeśli zamówienie zostanie zatwierdzone to dział wysyłki powinien rozpocząć realizację zamówienia. Scenariusz
public class SimpleEventPublisher : IEventSubscriber, IDomainEventPublisher { private ConcurrentHashSet _eventHandlers = new ConcurrentHashSet (); public void Subscribe(IEventListener listener) { _eventHandlers.TryAdd(listener); } public void Unsubscribe(IEventListener listener) { _eventHandlers.TryRemove(listener); } public void Publish (T domainEvent) { foreach (var handler in _eventHandlers) if (handler is IEventListener ) ((IEventListener ) handler).Handle(domainEvent); } Implementacja
In-memory Message bus Możliwe implementacje
Inne zastosowania
Lista faktur
Lista klientów + saldo
CqRS Event sourcing UI Aggregator Integracja z logiką domenową Inne zastosowania
Zdarzenia out-of-order
Niektórym zaufanym klientom wysyłamy towar bez dokumentu zamówienia. Scenariusz
Saga to model złożonego procesu, którego stan jest trwały oraz zależy od wielu zdarzeń. Saga
DEMO Saga
Bounded Context Domain Events Saga Podsumowanie
Michał Mac Architekt, konsultant | macmichal.pl Dziękuję za uwagę
Linki
Organizatorzy MTS czytają wszystkie ankiety. Dzięki nim masz realny wpływ na konferencję oraz merytorykę i prelegentów kolejnego MTS. Wystarczy 5 minut Twojego czasu na wypełnienie ankiety! Masz szansę wygrać m.in. wejściówkę na MTS 2013 (25x) oraz inne nagrody. Gdzie i jak? Ankiety dostępne są online – na stronie konferencji (konferencjamts.pl) Można je wypełnić od dziś, aż do 11 listopada 2012 Wypełnij ankietę i wygraj nagrody!
Strefa ATE dostępna jest w strefie Partnerów Zapraszamy wszystkich zainteresowanych poszerzeniem wiedzy Eksperci będą do Państwa dyspozycji Strefa Ekspertów (ATE)
© 2012 Microsoft Corporation. Wszelkie prawa zastrzeżone. Microsoft, Windows oraz inne nazwy produktów są lub mogą być znakami towarowymi lub zastrzeżonymi znakami towarowymi firmy Microsoft w Stanach Zjednoczonych i innych krajach. Zamieszczone informacje mają charakter wyłącznie informacyjny. FIRMA MICROSOFT NIE UDZIELA ŻADNYCH GWARANCJI (WYRAŻONYCH WPROST LUB DOMYŚLNIE), W TYM TAKŻE USTAWOWEJ RĘKOJMI ZA WADY FIZYCZNE I PRAWNE, CO DO INFORMACJI ZAWARTYCH W TEJ PREZENTACJI.