1
2 Projektowanie skalowalnych architektur z wykorzystaniem zaawansowanych technik DDD Michał Mac macmichal.pl
3 Michał Mac Architekt, konsultant | macmichal.pl [email protected] 513 95 93 79 Kontakt z prelegentem
4 Po sesji będziesz Wiedział\a jak projektować autonomiczne komponenty. Znał\a sposoby luźnego ich wiązania. Cel sesji
5
6 DDD book
7 Oprogramowanie modułowe. Czym jest Bounded Context? Zaawansowane techniki DDD łączenia BC. Plan prezentacji
8 Modularność
9 Projekt systemu Projekt
10 Czym jest produkt?
11
12 Projekt systemu Projekt
13 Projekt systemu
14 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
15 DEMO Bounded Contexts
16 BC - komórki
17 Integracja BC
18 Jeśli klient w module CRM zostanie oznaczony jako VIP to nadaj rabat jego wszystkich niezatwierdzonym zamówieniom. Scenariusz
19 Interakcja CRM Bounded ContextSales Bounded Context
20 Interakcja CRM Bounded ContextSales Bounded Context
21 Interakcja CRM Bounded ContextSales Bounded Context EventBroker
22
23 public interface IDomainEventPublisher { void Publish (T domainEvent) where T : IDomainEvent; } EventBroker
24 public interface IDomainEventPublisher { void Publish (T domainEvent) where T : IDomainEvent; } public interface IEventSubscriber { void Subscribe(IEventListener listener); void Unsubscribe(IEventListener listener); } EventBroker
25 public interface IEventListener { } public interface IEventListener : IEventListener { void Handle(TEvent eventData); } EventBroker
26 DEMO Domain Events
27 Jeśli zamówienie zostanie zatwierdzone to dział wysyłki powinien rozpocząć realizację zamówienia. Scenariusz
28 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
29 In-memory Message bus Możliwe implementacje
30 Inne zastosowania
31 Lista faktur
32
33
34 Lista klientów + saldo
35 CqRS Event sourcing UI Aggregator Integracja z logiką domenową Inne zastosowania
36 Zdarzenia out-of-order
37 Niektórym zaufanym klientom wysyłamy towar bez dokumentu zamówienia. Scenariusz
38
39 Saga to model złożonego procesu, którego stan jest trwały oraz zależy od wielu zdarzeń. Saga
40 DEMO Saga
41 Bounded Context Domain Events Saga Podsumowanie
42 Michał Mac Architekt, konsultant | macmichal.pl [email protected] +513 95 93 79 Dziękuję za uwagę
43 http://cqrssample.codeplex.com/ http://cqrssample.codeplex.com/ http://blog.macmichal.pl/ http://blog.macmichal.pl/ Linki
44 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!
45 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)
46 © 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.