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

Domain-Driven Transformation

Domain-Driven Transformation

Henning Schwentner

February 05, 2025
Tweet

More Decks by Henning Schwentner

Other Decks in Programming

Transcript

  1. salesperson [person] Monolease [software system] Central car leasing tool customer

    [external person] risk manager [person] closes leasing contracts with creates and calculates contracts in assesses risk of contracts in Alphorn Auto Leasing Inc. [enterprise] Context
  2. @hschwentner long time to market error-prone teams get in each

    other’s way Issues with Legacy Systems it’s hard to build new ideas into the system and they are doing more or less the same there are often more than one
  3. @hschwentner big ball of mud poorly expressed domain knowledge bad

    team organization Typical Diseases of Legacy Systems
  4. @hschwentner big ball of mud poorly expressed domain knowledge bad

    team organization Cures strategic transformation tactical transformation team-organizational transformation
  5. @hschwentner Domain-Driven Refactorings • Strategic Refactorings • Tactical Refactorings (that

    support strategic ones) Catalog: https://hschwentner.io/domain-driven-refactorings strategic transformation tactical transformation team-organizational transformation • Socio-Technical • Tactical refactorings (that strengthen domain knowledge in the code)
  6. @hschwentner Strategic Transformation 1. Step: Domain re-discovery 2. Step: Modeling

    the target architecture 3. Step: Aligning current with target architecture 4. Step: Do the move
  7. @hschwentner Strategic Transformation 1. Step: Domain re-discovery 2. Step: Modeling

    the target architecture 3. Step: Aligning current with target architecture 4. Step: Do the move
  8. customer tells wish for 1 salesperson signs to gives for

    contract 3 risk manager contract passes on to 4 contract votes checks calculates 5 6 7 calculates to 8 2 car credit rating installment car resale value contract
  9. May 7th—10th 2025 Vienna, Austria The Collaborative Modeling Unconference comocamp.org

    Event Storming User Story Mapping Event Modeling Impact Mapping Domain Storytelling Storystorming Context Mapping Example Mapping etc.
  10. customer tells wish for 1 salesperson signs to gives for

    contract 3 risk manager contract passes on to 4 contract votes checks calculates 5 6 7 calculates to 8 2 car credit rating installment car resale value contract sales risk assessment
  11. Monolease [software system] salesperson [person] Monolease [software system] Central car

    leasing tool customer [external person] risk manager [person] closes leasing contracts with creates and calculates contracts in assesses risk of contracts in Alphorn Auto Leasing Inc. [enterprise] Context again
  12. backend [container] database [container] frontend [container] salesperson [person] backend [container:

    EJB 2] risk manager [person] creates and calculates contracts in assesses risk of contracts in Monolease [software system] frontend [container: servlets, JSPs] database [container: IBM DB2] Containers
  13. Calculator [component] frontend [container] LeasingServlet [component: servlet] CONTRACTS [database table]

    PartnerServlet [component: servlet] ContractService [component] PartnerService [component] backend [container] database [container] Contract [component] Partner [component] PARTNERS [database table] Components
  14. Calculator [component] frontend [container] LeasingServlet [component: servlet] CONTRACTS [database table]

    PartnerServlet [component: servlet] ContractService [component] PartnerService [component] backend [container] database [container] Contract [component] Partner [component] PARTNERS [database table] Components
  15. @hschwentner Dave Thomas The DRY Principle Andy Hunt “Every piece

    of knowledge must have a single, unambiguous, authoritative representation within a system.”
  16. customer tells wish for 1 salesperson signs to gives for

    contract 3 risk manager contract passes on to 4 contract votes checks calculates 5 6 7 calculates to 8 2 car credit rating installment car resale value contract sales risk assessment
  17. ContractService signContract() voteContract() Code Contract getContractNumber() setSignatureDate() setCreditRating() setVotingResult() Sales

    Risk Assessment ContractService signContract() voteContract() Contract getContractNumber() setSignatureDate() setCreditRating() setVotingResult()
  18. ContractService signContract() Code Contract getContractNumber() setSignatureDate() Sales Risk Assessment ContractService

    voteContract() Contract getContractNumber() setCreditRating() setVotingResult()
  19. ContractService signContract() Code Contract getContractNumber() setSignatureDate() Sales Risk Assessment ContractService

    voteContract() Contract getContractNumber() setCreditRating() setVotingResult()
  20. ContractService signContract() Contract getContractNumber() setSignatureDate() Sales Risk Assessment ContractService voteContract()

    Contract getContractNumber() setCreditRating() setVotingResult() ContractService signContract() voteContract() Contract getContractNumber() setSignatureDate() setCreditRating() setVotingResult() Monolease =>
  21. @hschwentner Improvement Backlog 1.2 Extract Specialized “Contract Service” 1.1 Extract

    Specialized “Contract” 1 Extract Context “Sales” Collecting Refactorings 2 Extract Context “Risk assessment” 2.1 Extract Specialized “Contract Service” 2.1 Extract Specialized “Contract”
  22. @hschwentner Improvement Backlog Planning Transformation Tactical Refactoring 1.1 Strategic Refactoring

    1 User Story A Product Backlog User Story E User Story B User Story C User Story D Tactical Refactoring 1.2 Tactical Refactoring 1.3 Tactical Refactoring 2.1 Strategic Refactoring 2 Sprint Backlog
  23. @hschwentner Improvement Backlog Planning Transformation User Story A Product Backlog

    User Story E User Story B User Story C User Story D Sprint Backlog Tactical Refactoring 1.1 Strategic Refactoring 1 Tactical Refactoring 1.2 Tactical Refactoring 1.3 Tactical Refactoring 2.1 Strategic Refactoring 2
  24. @hschwentner Improvement Backlog Planning Transformation Tactical Refactoring 1.1 Strategic Refactoring

    1 User Story A Product Backlog User Story E User Story B User Story C User Story D Tactical Refactoring 1.2 Tactical Refactoring 1.3 Tactical Refactoring 2.1 Strategic Refactoring 2 Sprint Backlog
  25. @hschwentner Improvement Backlog Planning Transformation Strategic Refactoring 1 Product Backlog

    User Story E User Story C User Story D Tactical Refactoring 1.3 Tactical Refactoring 2.1 Strategic Refactoring 2 Sprint Backlog
  26. @hschwentner Improvement Backlog Planning Transformation Strategic Refactoring 1 Product Backlog

    User Story E User Story C User Story D Tactical Refactoring 2.1 Strategic Refactoring 2 Sprint Backlog User Story F User Story G Tactical Refactoring 1.3
  27. @hschwentner Improvement Backlog Planning Transformation Strategic Refactoring 1 Product Backlog

    User Story E User Story C User Story D Tactical Refactoring 1.3 Tactical Refactoring 2.1 Strategic Refactoring 2 Sprint Backlog User Story F User Story G
  28. @hschwentner Improvement Backlog Planning Transformation Product Backlog User Story E

    Tactical Refactoring 2.1 Strategic Refactoring 2 Sprint Backlog User Story F User Story G
  29. @hschwentner Improvement Backlog Planning Transformation Product Backlog User Story E

    Tactical Refactoring 2.1 Strategic Refactoring 2 Sprint Backlog User Story G User Story H User Story F User Story I
  30. ContractService signContract() voteContract() Code Contract getContractNumber() setSignatureDate() setCreditRating() setVotingResult() Risk

    Assessment ContractService Contract Monolease voteContract() getContractNumber() setCreditRating() setVotingResult()
  31. ContractService signContract() Code Contract getContractNumber() setSignatureDate() Risk Assessment ContractService Contract

    Monolease voteContract() getContractNumber() setCreditRating() setVotingResult()
  32. @hschwentner Domain Patterns Pipeline Domain Blackboard Domain Dialog Domain •

    Logistics • Insurances and banks • administration • healthcare • event management • control center • Software development • Communication software • Negotiations in various domains
  33. Bibliography Conway, Melvin E. “How Do Committees Invent?” Datamation 14,

    no. 5 (April 1968): 28–31. Evans, Eric. Domain-Driven Design: Tackling Complexity in the Heart of Software. Boston: Addison- Wesley, 2004. Feathers, Michael C. Working Effectively with Legacy Code. Upper Saddle River, NJ: Prentice Hall, 2004. Foote, Brian and Joseph Yoder. “Big Ball of Mud.” PLoP ’97, Monticello, IL, September 1997. Fowler, Martin. “Strangler Fig Application.” Bliki, June 29, 2004. Fowler, Martin. Refactoring: Improving the Design of Existing Code. 2nd ed. Boston: Addison-Wesley, 2019. Hofer, Stefan and Henning Schwentner. Domain Storytelling: a Collaborative, Visual, and Agile Way to Develop Domain-Driven Software. Boston: Addison-Wesley, 2022. Lilienthal, Carola. Sustainable Software Architecture: Analyze and Reduce Technical Dept. Heidelberg: dpunkt, 2019. Lilienthal, Carola and Henning Schwentner. Domain-Driven Transformation: Modularize and Modernize Legacy Software. Boston: Addison-Wesley, 2025. Kernighan, Brian W. Software Tools in Pascal. Addison-Wesley, 1981. Newman, Sam. Monolith to Microservices: Evolutionary Patterns to Transform Your Monolith.