@startuml title Component View: Software Development Model for Product feature delivery - Software Architecture and Domain-Driven Design set separator none left to right direction !include !include !include !include !include plantuml/c4-overrides.puml AddElementTag("Component,product", $bgColor="#808080", $borderColor="#595959", $fontColor="#ffffff", $sprite="", $shadowing="", $borderStyle="solid") AddElementTag("Person,product", $bgColor="#808080", $borderColor="#595959", $fontColor="#ffffff", $sprite="", $shadowing="", $borderStyle="solid") AddElementTag("Container,product", $bgColor="#808080", $borderColor="#595959", $fontColor="#ffffff", $sprite="", $shadowing="", $borderStyle="solid") AddElementTag("Component", $bgColor="#85bbf0", $borderColor="#5d82a8", $fontColor="#ffffff", $sprite="", $shadowing="", $borderStyle="solid") AddElementTag("Person", $bgColor="#08427b", $borderColor="#052e56", $fontColor="#ffffff", $sprite="", $shadowing="", $borderStyle="solid") AddElementTag("Container", $bgColor="#438dd5", $borderColor="#2e6295", $fontColor="#ffffff", $sprite="", $shadowing="", $borderStyle="solid") AddRelTag("Relationship", $textColor="#444444", $lineColor="#444444", $lineStyle = DashedLine()) AddBoundaryTag("Container", $bgColor="#ffffff", $borderColor="#2e6295", $fontColor="#2e6295", $shadowing="", $borderStyle="solid") Person(DomainExpert, "Domain Expert", $descr="Product Team member who owns and drives the product vision", $tags="Person,product", $link="") Person(SoftwareEngineer, "Software Engineer", $descr="Development Team member delivering high-quality software efficiently and iteratively", $tags="Person", $link="") System_Boundary("SoftwareDevelopmentModelforProductfeaturedelivery_boundary", "Software Development Model for Product feature delivery", $tags="Software System") { Container_Boundary("SoftwareDevelopmentModelforProductfeaturedelivery.SoftwareArchitectureandDomainDrivenDesign_boundary", "Software Architecture and Domain-Driven Design", $tags="Container") { Component(SoftwareDevelopmentModelforProductfeaturedelivery.SoftwareArchitectureandDomainDrivenDesign.StrategicArchitecture, "Strategic Architecture", $techn="Core Domain Charts, Context Maps, etc", $descr="Decompose a large problem domain into cohesive modules, so that we can identify strategically significant parts of the domain", $tags="Component,product", $link="") Component(SoftwareDevelopmentModelforProductfeaturedelivery.SoftwareArchitectureandDomainDrivenDesign.SoftwareDesign, "Software Design", $techn="Bounded Context Canvas, Aggregate Design Canvas, C4 model, etc", $descr="Document Bounded Contexts, from naming to responsibilities alongside its public interface and dependencies", $tags="Component", $link="") Component(SoftwareDevelopmentModelforProductfeaturedelivery.SoftwareArchitectureandDomainDrivenDesign.CodetheDomainModel, "Code the Domain Model", $techn="Services, Repositories, Events, etc", $descr="Code the Domain Model applying Tactical Patterns - a set of building blocks to structure the implementation of the model", $tags="Component", $link="") } Container(SoftwareDevelopmentModelforProductfeaturedelivery.ExtremeProgramming, "Extreme Programming ", $techn="XP", $descr="Developers work together in pairs and as a group, improving the design continually to keep it always just right for the current needs", $tags="Container", $link="") Container(SoftwareDevelopmentModelforProductfeaturedelivery.AlignandUnderstandProductRequirements, "Align and Understand Product Requirements", $techn="Align & Understand", $descr="Align our focus with the organisation's business model, the needs of its users, and its short, medium, and long-term goals", $tags="Container,product", $link="") } Rel(SoftwareDevelopmentModelforProductfeaturedelivery.AlignandUnderstandProductRequirements, SoftwareDevelopmentModelforProductfeaturedelivery.SoftwareArchitectureandDomainDrivenDesign.StrategicArchitecture, "problem decomposition", $techn="", $tags="Relationship", $link="") Rel(SoftwareDevelopmentModelforProductfeaturedelivery.SoftwareArchitectureandDomainDrivenDesign.StrategicArchitecture, SoftwareDevelopmentModelforProductfeaturedelivery.SoftwareArchitectureandDomainDrivenDesign.SoftwareDesign, "collaborative modelling", $techn="", $tags="Relationship", $link="") Rel(SoftwareDevelopmentModelforProductfeaturedelivery.SoftwareArchitectureandDomainDrivenDesign.SoftwareDesign, SoftwareDevelopmentModelforProductfeaturedelivery.SoftwareArchitectureandDomainDrivenDesign.CodetheDomainModel, "apply tactical patterns", $techn="", $tags="Relationship", $link="") Rel(SoftwareEngineer, SoftwareDevelopmentModelforProductfeaturedelivery.SoftwareArchitectureandDomainDrivenDesign.StrategicArchitecture, "identifies strategically significant parts of the domain", $techn="", $tags="Relationship", $link="") Rel(DomainExpert, SoftwareDevelopmentModelforProductfeaturedelivery.SoftwareArchitectureandDomainDrivenDesign.StrategicArchitecture, "validates and categorizes subdomains", $techn="", $tags="Relationship", $link="") Rel(SoftwareDevelopmentModelforProductfeaturedelivery.SoftwareArchitectureandDomainDrivenDesign.CodetheDomainModel, SoftwareDevelopmentModelforProductfeaturedelivery.ExtremeProgramming, "guides code implementation", $techn="", $tags="Relationship", $link="") SHOW_LEGEND(true) hide stereotypes @enduml