Model C4 poziom C3
Zimny pot wystąpił na czoło byznesu, „to naprawdę takie skomplikowane?”
Diagram komponentów.
Poziom dotyczący komponentów. Został odkryty za pomocą Event Storming Proccess Level. W ES PL wyznaczyliśmy Bounded Contexty, do znalezienia BC służą heurystyki (kurs DNA tydzień trzeci).
Na początek rezultat.
Definicja komponentów
Opisy poszczególnych komponentów są to subdomeny, które mieszczą się w danym BC (bounded context).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Component userBC = webTorf.AddComponent("Użytkownik", "Rejestrowanie użytkownika, nadawanie identyfikatora", "brak"); Component rabatCodeBC = webTorf.AddComponent("Kody rabatowe", "Definiowanie kodów, generowanie kodów, wykorzystanie kodów", "brak"); Component clientRabatBC = webTorf.AddComponent("Rabaty klienckie", "Definiowanie rabatów klienckich,przypisywanie rabatu klientowi," +" Pobieranie historii rabatów, odebranie rabatu klientowi", "brak"); Component promotionBC = webTorf.AddComponent("Promocje", "Definiowanie promocji, uruchamianie promocji, kończenie promocji" , "brak"); Component productCatalogBC = webTorf.AddComponent("Katalog produktów", "Zarządzanie katalogiem produktów", "brak"); Component warehouseBC = webTorf.AddComponent("Magazyn", "Wyszukiwanie towaru, przyjmowanie towaru, wydawanie towaru", "brak"); Component paymentsBC = webTorf.AddComponent("Płatności", "Płacenie szybką płatnością, zwracanie płatności, " +" płacenie przelewem", "brak"); Component acountentBC = webTorf.AddComponent("Księgowość", "Wystawianie faktur", "brak"); Component personalPickupBC = webTorf.AddComponent("Odbiór osobisty", "Odbieranie osobiste", "brak"); Component curierDeliveryBC = webTorf.AddComponent("Dostawa kurierem", "Dostarczanie towaru kurierem", "brak"); Component priceBC = webTorf.AddComponent("Cena", "Ustalenie czynników ceny, ustalenie ceny", "brak"); Component orderBC = webTorf.AddComponent("Zamówienie", "Wybieranie towaru, wybieranie sposobu dostawy," + " finalizowanie zamówienia,anulowanie zamówienia przez klienta,anulowanie zamówienia przez system" + " zwracanie towaru, reklamowanie towaru,wydanie zamówienia", "brak"); |
Zależności
Zależności podzieliłem na dwie części gdyż jest tego dużo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
//BC uzytkownik userBC.Uses(mailChimp, "Używa"); userBC.Uses(externalSystem, "Używa"); //BC rabat rabatCodeBC.Uses(mailChimp, "Używa"); //BC rabat dla klienta clientRabatBC.Uses(mailChimp, "Używa"); //BC platnosci paymentsBC.Uses(traditionalBank, "przelewy tradycyjne"); paymentsBC.Uses(quickPayments, "szybki przelew"); paymentsBC.Uses(mailChimp, "Używa"); //BC ksiegowosc acountentBC.Uses(ksiegowoscSystem, "System fakturowania"); //BC Kurier curierDeliveryBC.Uses(kurierSystem, "System kuriera"); //BC Zamowienie orderBC.Uses(kurierSystem, "Wybór kurieta"); orderBC.Uses(basketSystem, "Zarządzanie koszykiem"); orderBC.Uses(mailChimp, "Kontakt z klientem"); |
Kolejna część zależności, opis znacznie bogatszy.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
userBC.Uses(rabatCodeBC, "Kod rabatowy za usterkę"); personalPickupBC.Uses(orderBC, "Potwierdzenie odbioru"); orderBC.Uses(personalPickupBC, "Wydanie towaru"); orderBC.Uses(curierDeliveryBC, "Wydanie towaru"); curierDeliveryBC.Uses(orderBC, "Potwierdzenie odbioru"); orderBC.Uses(warehouseBC, "Zwrot Towaru"); warehouseBC.Uses(orderBC, "Wydanie zamówienia"); paymentsBC.Uses(warehouseBC, "Zarezerwowanie towaru"); paymentsBC.Uses(acountentBC, "Zwrot płatności, zlecenie płatności"); orderBC.Uses(paymentsBC, "Złożenie zamówienia, płatność"); orderBC.Uses(priceBC, "Wyliczenie ceny"); priceBC.Uses(orderBC, "Naliczenie rabatu"); warehouseBC.Uses(orderBC, "Dodanie do koszyka"); user.Uses(userBC, "Rejestracja"); user.Uses(warehouseBC, "Wybór towaru"); user.Uses(orderBC,"Składanie zamówienia"); user.Uses(personalPickupBC, "Odbiór osobisty"); user.Uses(curierDeliveryBC, "Odbiór towaru od kuriera"); storeKeeper.Uses(warehouseBC, "Przyjęcie/Odbiór towaru"); worker.Uses(curierDeliveryBC, "Wydanie towaru"); worker.Uses(personalPickupBC, "Wydanie towaru"); bok.Uses(orderBC, "Reklamacje, zwroty"); accountant.Uses(paymentsBC, "Sprawdzanie płatności"); user.Uses(priceBC,"Wpisanie kodu rabatowego"); worker.Uses(userBC, "Ręczne nadanie ID "); admin.Uses(rabatCodeBC, "Reguły rabatów"); admin.Uses(promotionBC, "Reguły promocji"); |
Dodanie do widoku
Tutaj są dwie opcje można dodać wszystkie systemy i ludzi za pomocą dwóch metod:
1 2 3 |
ComponentView componentView = views.CreateComponentView(webTorf, "Components", "Diagram komponentów dla Systemu Torf"); componentView.AddAllSoftwareSystems(); componentView.AddAllPeople(); |
Albo zrobić osobno każdy element, ja wybrałem opcje numer dwa.
1 2 3 4 5 6 7 8 9 10 11 12 |
ComponentView componentView = views.CreateComponentView(webTorf, "Components", "Diagram komponentów dla Systemu Torf"); componentView.Add(userBC); componentView.Add(rabatCodeBC); componentView.Add(clientRabatBC); componentView.Add(promotionBC); componentView.Add(productCatalogBC); componentView.Add(warehouseBC); componentView.Add(paymentsBC); componentView.Add(acountentBC); componentView.Add(personalPickupBC); componentView.Add(priceBC); componentView.Add(orderBC); |
Cześć druga
1 2 3 4 5 6 7 8 9 10 11 |
componentView.Add(mailChimp); componentView.Add(quickPayments); componentView.Add(traditionalBank); componentView.Add(externalSystem); componentView.Add(basketSystem); componentView.Add(kurierSystem); componentView.Add(ksiegowoscSystem); componentView.Add(user); componentView.Add(bok); componentView.Add(storeKeeper); componentView.Add(accountant); |
Podsumowanie
Jak w poprzednich poziomach style i upload na structurizr.