Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Architectural Anti-patterns

lszydlo
April 03, 2017

Architectural Anti-patterns

lszydlo

April 03, 2017
Tweet

More Decks by lszydlo

Other Decks in Technology

Transcript

  1. O MNIE ➤ Programista, Architekt, Konsultant
 ➤ Pomagam firmom tworzyć

    lepszy soft
 ➤ DDD, Architektura, Projektowanie
 ➤ Mąż i ojciec piątki dzieci
  2. GWIDON ➤ Obiecujący programista Java/C#/ PHP/Ruby/JS… ➤ Pracuje przy głębokim

    systemie e-commerce ➤ Chciałby aby jego system był: ➤ Skalowalny ➤ Rozszerzalny ➤ Testowalny ➤ Stabilny ➤ Aspiruje do roli architekta Ale coś mu nie wychodzi :(
  3. MONOMODELIOZA ZŁOŚLIWA ➤ Objawy: ➤ spuchnięte encje, na których może

    pojawiać się geteroza i seteroza. ➤ Powikłania ➤ DTOza ➤ Spowolniona responsywnoś odczytowa ➤ Niedorozwojowość ➤ Skalofobia
  4. KONTEKST AUTOBUSU ➤ Dla pasażera - środek transportu ➤ [numer

    linii, godzina odjazdu, …] ➤ Dla kierowcy - miejsce pracy ➤ [poziom paliwa, miejsce postojowe, …] ➤ Dla mechanika - sprzęt wymagający konserwacji ➤ [przebieg, data ostatniego przeglądu, stan techniczny, …] ➤ Dla księgowego - środek trwały ➤ [typ i czas amortyzacji, leasing, …] ➤ Dla dealera - towar ➤ [cena, rabat, dostępność, …]
  5. LECZENIE - BOUNDED CONTEXT Shopping Delivery Ordering Authorisation Payment SHOPPER

    ORDERER PAYER RECEIVER SUBJECT CUSTOMER Recommendations
  6. LECZENIE - BOUNDED CONTEXT Shopping Delivery Ordering Recommendations Authorisation Payment

    SHOPPER - ID (36) - BASKET ORDERER - ID (36) - ORDER PAYER - ID (36) - PAYMENT METHODS RECEIVER - ID (36) - SHIPPING ADDRESS SUBJECT - ID (36) - LOGIN - PASSWORD CUSTOMER - ID (36) - SHOPPING HISTORY
  7. ODCZYT VS ZAPIS (CQRS) APPLICATION SERVER 1. User Command 3.

    Business Fact VIEW LOGIC (NO STATE CHANGE) 5. User Query 5. Data Store Query 2. Load State 4. Response BUSINESS LOGIC (STATE CHANGE)
  8. PRZEWLEKŁA TRANSAKCJULOZA ➤ Objawy: ➤ transakcje na poziomie serwisów ➤

    długie serwisy z wieloma zależnościami ➤ Powikłania ➤ Transakcjuloza rozsiana ➤ Permanentny monolityzm ➤ Niedorozwojowość ➤ Skalofobia
  9. NATRĘTNA IMPOTESTIA ➤ Objawy: ➤ brak testów, lub bardzo mała

    ich ilość ➤ dużo testów przez UI mało jednostkowych ➤ skomplikowane testy wymagające ciągłego utrzymania ➤ Powikłania ➤ Pasożyty ➤ Testowstręt ➤ Niedorozwojowość ➤ Upośledzenie czasy develpmentu
  10. STRUKTURA UŻYTECZNEGO PROGRAMU Input Output Logic ➤ A - Uniemożliwiają

    wykonanie akcji ➤ B - Pozwalają na wykonanie akcji źle ➤ λ - Zapobieganie (testy) ➤ β - Leczenie (naprawa bug-ów)
  11. STRUKTURA UŻYTECZNEGO PROGRAMU Input Output Logic ➤ A - Uniemożliwiają

    wykonanie akcji ➤ B - Pozwalają na wykonanie akcji źle ➤ λ - Zapobieganie (testy) ➤ β - Leczenie (naprawa bug-ów)
  12. API ENDPOINTS JSON->ENTITY JSON->DTO ARCHITEKTURA WARSTWOWA Depends on APPLICATION SERVER

    USER INTERFACE APPLICATION SERVICES PERSISTENCE DATABASE (SQL, DOCUMENT, GRAPH …) AS MUCH IF-S
 AS NEEDED ENTITIES DTO
  13. APPLICATION SERVER ARCHITEKTURA WARSTWOWA API ENDPOINTS JSON->ENTITY JSON->DTO Depends on

    USER INTERFACE APPLICATION SERVICES PERSISTENCE DATABASE (SQL, DOCUMENT, GRAPH …) AS MUCH IF-S
 AS NEEDED ENTITIES DTO EXTERNAL SYSTEMS CONFIG SECURITY QUEUE CLIENT EXTERNAL SYSTEM (SOAP, REST, RPC …) QUEUE (RABBITMQ, JMS, HAZELCAST… ) CONFIG STORAGE (PROPERTY FILES, GIT, VAULT, SYSTEM VARIABLES …) SECURITY PROVIDER (OAUTH, SESSION, MICROSERVICE, DB…)
  14. APPLICATION SERVER ARCHITEKTURA WARSTWOWA API ENDPOINTS JSON->ENTITY JSON->DTO Depends on

    USER INTERFACE APPLICATION SERVICES PERSISTENCE DATABASE (SQL, DOCUMENT, GRAPH …) AS MUCH IF-S
 AS NEEDED ENTITIES DTO EXTERNAL SYSTEMS CONFIG SECURITY QUEUE CLIENT EXTERNAL SYSTEM (SOAP, REST, RPC …) QUEUE (RABBITMQ, JMS, HAZELCAST… ) CONFIG STORAGE (PROPERTY FILES, GIT, VAULT, SYSTEM VARIABLES …) SECURITY PROVIDER (OAUTH, SESSION, MICROSERVICE, DB…) DTO DTO DTO DTO DTO
  15. APPLICATION SERVER ARCHITEKTURA WARSTWOWA API ENDPOINTS JSON->ENTITY JSON->DTO Depends on

    APPLICATION SERVICES PERSISTENCE AS MUCH IF-S
 AS NEEDED ENTITIES DTO EXTERNAL SYSTEMS CONFIG SECURITY QUEUE CLIENT INTERFACE DTO IMPL LIB INTERFACE DTO IMPL LIB INTERFACE DTO IMPL LIB INTERFACE DTO IMPL LIB INTERFACE DTO IMPL LIB
  16. APPLICATION SERVER ARCHITEKTURA P&A API ENDPOINTS JSON->DTO Depends on APPLICATION

    SERVICES PERSISTENCE AS MUCH IF-S
 AS NEEDED ENTITIES DTO EXTERNAL SYSTEMS CONFIG SECURITY QUEUE CLIENT SECURITY DTO IMPL LIB CONFIG DTO IMPL LIB PERSISTANCE DTO IMPL LIB EXTERNAL DTO IMPL LIB QUEUE DTO IMPL LIB
  17. ARCHITEKTURA P&A APPLICATION SERVER secondary port EXTERNAL SYSTEM EXTERNAL SYSTEM

    EXTERNAL SYSTEM EXTERNAL SYSTEM primary port CLIENT CLIENT primary adapter secondary adapter
  18. PERMANENTNA MONOSTRUKTUROZA ➤ Objawy: ➤ wszystkie moduły wyglądają identycznie ➤

    Powikłania ➤ DTOza ➤ Konwertoza ➤ Mapperoza ➤ SQLioza
  19. SQLIOZA UTAJONA ➤ Objawy: ➤ operowanie i persystowanie snapshot-ów ➤

    naginanie wymagań do tabelek ➤ Powikłania ➤ Amnezja ➤ Syndrom archeologa ➤ Patologiczna zależność od ORM
  20. SQLIOZA UTAJONA SHOPPING_CART SHOPPING CART OBJECT MODEL RELATIONAL MODEL CART_ITEM

    CART_ID USER_ID 11 2 CART_ID ITEM_ID NAME 11 1 A 11 2 B id userId ITEMS COLLECTION id name ADD ITEM ‚A’ ADD ITEM ‚B’ user id: 2 cart id: 11 time 1 *
  21. SQLIOZA UTAJONA SHOPPING_CART SHOPPING CART OBJECT MODEL RELATIONAL MODEL CART_ITEM

    CART_ID USER_ID 11 2 22 3 CART_ID ITEM_ID NAME 11 1 A 11 2 B 22 1 A 22 2 B id userId ITEMS COLLECTION id name ADD ITEM ‚A’ ADD ITEM ‚B’ user id: 2 cart id: 11 time ADD ITEM ‚A’ ADD ITEM ‚B’ user id: 3 cart id: 22 ADD ITEM ‚C’ REM ITEM ‚C’ 1 *
  22. SQLIOZA UTAJONA SHOPPING CART OBJECT MODEL EVENT MODEL EVENT_STORE EVENT_ID

    AGR_ID DATA 1 11 ADD A 2 11 ADD B 3 22 ADD A 4 22 ADD B 5 22 ADD C 6 22 REM C id userId ITEMS COLLECTION id name ADD ITEM ‚A’ ADD ITEM ‚B’ user id: 2 cart id: 11 time ADD ITEM ‚A’ ADD ITEM ‚B’ user id: 3 cart id: 22 ADD ITEM ‚C’ REM ITEM ‚C’ EVENT id userId data
  23. SQLIOZA UTAJONA SHOPPING CART OBJECT MODEL EVENT MODEL EVENT_STORE EVENT_ID

    AGR_ID DATA 1 11 ADD A 2 11 ADD B 3 22 ADD A 4 22 ADD B 5 22 ADD C 6 22 REM C id userId ITEMS COLLECTION id name EVENT id userId data EVENT EVENT EVENT EVENT EVENT id userId data REPOSITORY Cart load(id) void save(cart)