SlideShare a Scribd company logo
1 of 4
Download to read offline
Chapter 1

    1. The language used between developers and domain experts should be one and the same.
       (a) Developers should thus learn the domain language, while domain experts will likely
           need to learn some software modelling terms to understand diagrams etc. that the
           developers construct.
       (b) The language should be reflected in communication between the techs and the domain
           experts, but should also be used amongst the techs and amongst the domain experts.
       (c) Benefits are:
            i. Umabiguous understanding amongst different teams. This saves time as people start
                on the same page..
            ii. Explanations can be more consise as terms do not have to be explained.
    2. If the language is not used ubquitously, then the lanuage, may have problems
       (inconsistencies, ambiguities, etc.).
       (a) Schisms may evolve when the language is fractured, which are when team members use
           terms differently but don't realize it.
    3. A diagram is not the model. Rather, a diagram helps people visualize the domain, or parts
       of it, but it does and should not explain everything.
       (a) Detailed diagrams require effort to construct and effort to understand.
       (b) Although it may be tempting to created detailed UML, UML to code generation is
           limited to what that particular diagraming method can display. As UML has trouble
           conveying the meaning and intent of an object (for instance), then the diagram is already
           limited in how much of the domain it can display.
    4. The detail should be in the code. Documents should complement the code and speech.
       (a) Documents that state what the code does explicitly are unnecessary. The codes is
           already explicit. Instead documents that are less detailed can serve to introduce someone
           to the code as code by itself can be overwhelming and hard to understand.
       (b) A document has costs associated with it, that should be understood.
            i. The language used and the model a document explains should be kept up to date, or
                the document should be archived.


Chapter 3
   1. Emphasis should be on increasing understaing, not on modelling per se. Understanding
       comes with doing, not thinking alone.
       (a) The dogma that the steps of a software cycle are separable and distinct, in so far as
           isolating teams therefrom can be beneficial, is untrue. The maleable logic that is
           software means unlimited solutions, with an enormous number of 'gotcha's'- analysts and
           designers will miss unforseen but very specific problems that the implementers will
           come across.
       (b) The implementers then have problems in negotiating these inevitable problems. They
           must come up with unsatisfactory solutions in the code; ignore parts of the model; or
           take time convincing the designers and/or analysists to redo the model, which may or
           may not solve the problem until once again it comes back to implementation.
       (c) In contrast to missing important problems, designers and analysist may waste time
           analyizing something that is trivial to implement.
   2. Relevance of the model is of upmost importance.
       (a) A model with little relevance means the code is a mechanism that does useful things but
           with no explanation. Hence if a model does exist, changing it has no relevance to how
           the code should change.
       (b) Hence the model should be relevant to both the domain and the implementation. Serving
           one should not sacrifice the other.
(c) Suggested to design a proportion in a very literal way. Then revist to make it more
              natural to the software domain. Demand a single model even as gaining deeper insight.
    3.    Avoid implied abstractions.
          (a) If you create a system that does meaningful work, but has no meaningful name attached
              to it, change it. The system should be reexamined to gain insight into what is really
              going on.
    4.    Don't hide abstractions.
          (a) If the system treats part of the domain in a certain and specific way, don't hide it from
              the user. In all likelihood, if that system adheres to the principles of some other domain,
              then an informed user can take advantage of that. Hiding these details may cause
              confusion as the user gets unexpected behaviour.
    5.    Unempowered developers (insofar as the model is concerned) means the model will have
          less relevance to them then how it should be.
          (a) Designers with little implementing experience do not understand how easy the
              implementation can be changed to suit a change in the model.
    6.    Implementers need to know how to express the model in the code.
          (a) Hence coders need to know the model well. Contact with the domain experts is good.
          (b)




Part II

    1. Understand fundamentals of support Model driven design.
       (a) Knowing how it works means teams can compromise with competing priorities without
           sacrificing import gains.

Chapter 4
   1. The domain objects are likely to only make up a small part of the software system.
       (a) Their size is disproportional to their size.
       (b) Hence it can be easy to lose which objects in the whole system are the really important
           ones.
   2. In OO languages, model-related concepts are imbedded in GUI, database and other, non-
       centralized components.
       (a) Easy to do in short run, but causes problems later on. Esentially the model is not 'in' a
           specific group of objects, rather the larger system is the model. Thus more of the system
           needs to change when the model changes.
   3. Layered architecture helps model driven design, with the model layer separated.
       (a) Suggested that should have 4 layers
            i. Presentation layer (Show information to user, gets input from user)
            ii. Application layer (Coordinates tasks between model objects, but does no domain
                 logic)
            iii. Domain layer (The heart of the system. Represents the domains concepts).
            iv. Infrastructure (Provides technical functionalities to higher layers, such as persistance
                 as UI widgets).
       (b) The separation of the domain layer is crucial for domain driven design- it may be
           beneficial to combine other layers, or have multiple infrastructure layes for instance, as
           the context demands.
       (c) Once separated, the domain objects are free to express the domain in powerful ways.
   4. Relating layers is a difficult task.
       (a) Frameworks help, as they usually provide either a design to separate layers in a well
understood way, or they provide classes that simplify supporting layers.
       (b) Becareful though, as frameworks should not be used excessively, or else there's a risk of
           constraining developers.
    5. The domain layer is the domain model in code.
       (a) Hence other software concerns cannot be in the model level, as that would change what
           it is.
    6. Smart UI can be a suitable replacement for heavy-weight domain driven design.
       (a) Smart UI have logic in the UI.
            i. Easy for beginner programmers; takes advantage of 4GL.
            ii. Falls down when domain is complex., as less reuse.
       (b) Using a flexible language does not mean a flexible program. If going to do smart UI,
           don't waste time with a low-level language- use the tools for the job. Conversely, for
           domain driven design need flexible languages like Java, C#.
    7. Isolating a model in a layer helps maintain it, but faces threats on other fronts.
       (a) Other teams may have different models for the same domain.
       (b) Parts of the system may not be fully integrated into the model.


Chapter 5
   1. Entities
       (a) Things within the model whose identity matters. Seats in a stadium may or may not be
           entities, despite the fact that all seats are 'unique' in a real world sense. In a stadium
           event management program, the identity of a seat would matter if it was allocated
           seating. However, if its just general admission, its meaningless to include the identity of
           seats in the model (that is, identity does not matter, and thus they are not entities).
       (b) Entities may change over time, in terms of what object(s) represent them in the
           implementation. Conversely, the attributes of entity may be the same as another entity.
           Hence identifying an entity should not rely on attributes.
       (c) Note that using the reference of an object in languages like Java may not be good
           enough, as persistence and networking will break this.
       (d) May use a combination of attributes to create an identity (a key), but need to be careful.
   2. Value objects
       (a) Things whose identity does not matter, only their value(s). They are used to describe
           things. For instance, the color red; the numbers 5 are value objects.
       (b) As a general rule, create a value object when you only care about the attributes of the
           element.
       (c) Value objects are easier to maintain then entities and lend themselves to optimizations
           that entities do not.
       (d) Value objects should be immutable. One advantage of this is they can be shared
           (performance). They can only be mutable if they are not shared.
       (e) Because identity of value objects does not matter, they can be freely copied wholy
           without concern for consequences.
       (f) Value objects should not have bidirectional relationships. The concept makes no sense.
           If model is asking for it, then maybe one of the value objects should actually be an
           entity.
   3. Services
       (a) When an action does not naturally belong to any entities or value objects within the
           domain, creating a standalone service interface solve this problem in a simple way.
       (b) The service interface should be define in terms of other domain objects.
       (c) The operation should be stateless. That is, the service will not be affected by its history.
       (d) Services should be separated into their relevant layers. That is, technical services like
           email notification should be in the infrastructure, while exporting a list of accounts to a
file should be in the application layer.
   (e) Service can help reduce complexity as responsibility for particular actions is less likely
       to leak into application layer objects.
   (f) How a service is provided is so important as the design decision to create it in the first
       place. A singleton class can neatly act as a service provider.
4. Modules
   (a) Good tool to break up parts of a system. Low coupling and high cohesion can be
       explained with the ubiquitous language.
        i. High cohesion = easier to think about what a module does
        ii. Low coupling = easier to think about a module in isolation.
   (b) Separating the model layer into distinct modules is useful, but deviding the other layers
       into modules should be treated as separate cases. That is, the modules in other layers
       should not follow the modules in the model layer unless it is useful to do so.
   (c) Module names should be part of the ubiquitous language.

More Related Content

What's hot

Uml Omg Fundamental Certification 1
Uml Omg Fundamental Certification 1Uml Omg Fundamental Certification 1
Uml Omg Fundamental Certification 1Ricardo Quintero
 
MODIGEN: MODEL-DRIVEN GENERATION OF GRAPHICAL EDITORS IN ECLIPSE
MODIGEN: MODEL-DRIVEN GENERATION OF GRAPHICAL EDITORS IN ECLIPSEMODIGEN: MODEL-DRIVEN GENERATION OF GRAPHICAL EDITORS IN ECLIPSE
MODIGEN: MODEL-DRIVEN GENERATION OF GRAPHICAL EDITORS IN ECLIPSEijcsit
 
Programming in UML: An Introduction to fUML 1.3 and Alf 1.1
Programming in UML: An Introduction to fUML 1.3 and Alf 1.1Programming in UML: An Introduction to fUML 1.3 and Alf 1.1
Programming in UML: An Introduction to fUML 1.3 and Alf 1.1Ed Seidewitz
 
MDD and modeling tools research
MDD and modeling tools researchMDD and modeling tools research
MDD and modeling tools researchRoger Xia
 
Industrial and Academic Experiences with a User Interaction Modeling Language...
Industrial and Academic Experiences with a User Interaction Modeling Language...Industrial and Academic Experiences with a User Interaction Modeling Language...
Industrial and Academic Experiences with a User Interaction Modeling Language...Marco Brambilla
 
GTMalpha - Towards a Graphical Notation for Topic Maps
GTMalpha - Towards a Graphical Notation for Topic MapsGTMalpha - Towards a Graphical Notation for Topic Maps
GTMalpha - Towards a Graphical Notation for Topic Mapstmra
 
Programming in UML: Why and How
Programming in UML: Why and HowProgramming in UML: Why and How
Programming in UML: Why and HowEd Seidewitz
 
Mapping and visualization of source code a survey
Mapping and visualization of source code a surveyMapping and visualization of source code a survey
Mapping and visualization of source code a surveyNakul Sharma
 

What's hot (8)

Uml Omg Fundamental Certification 1
Uml Omg Fundamental Certification 1Uml Omg Fundamental Certification 1
Uml Omg Fundamental Certification 1
 
MODIGEN: MODEL-DRIVEN GENERATION OF GRAPHICAL EDITORS IN ECLIPSE
MODIGEN: MODEL-DRIVEN GENERATION OF GRAPHICAL EDITORS IN ECLIPSEMODIGEN: MODEL-DRIVEN GENERATION OF GRAPHICAL EDITORS IN ECLIPSE
MODIGEN: MODEL-DRIVEN GENERATION OF GRAPHICAL EDITORS IN ECLIPSE
 
Programming in UML: An Introduction to fUML 1.3 and Alf 1.1
Programming in UML: An Introduction to fUML 1.3 and Alf 1.1Programming in UML: An Introduction to fUML 1.3 and Alf 1.1
Programming in UML: An Introduction to fUML 1.3 and Alf 1.1
 
MDD and modeling tools research
MDD and modeling tools researchMDD and modeling tools research
MDD and modeling tools research
 
Industrial and Academic Experiences with a User Interaction Modeling Language...
Industrial and Academic Experiences with a User Interaction Modeling Language...Industrial and Academic Experiences with a User Interaction Modeling Language...
Industrial and Academic Experiences with a User Interaction Modeling Language...
 
GTMalpha - Towards a Graphical Notation for Topic Maps
GTMalpha - Towards a Graphical Notation for Topic MapsGTMalpha - Towards a Graphical Notation for Topic Maps
GTMalpha - Towards a Graphical Notation for Topic Maps
 
Programming in UML: Why and How
Programming in UML: Why and HowProgramming in UML: Why and How
Programming in UML: Why and How
 
Mapping and visualization of source code a survey
Mapping and visualization of source code a surveyMapping and visualization of source code a survey
Mapping and visualization of source code a survey
 

Similar to Domain Driven Design Thoughts Mat Holroyd

Writing good C# code for good cloud applications - Draft Oct 20, 2014
Writing good C# code for good cloud applications - Draft Oct 20, 2014Writing good C# code for good cloud applications - Draft Oct 20, 2014
Writing good C# code for good cloud applications - Draft Oct 20, 2014Marco Parenzan
 
Design patterns in_c_sharp
Design patterns in_c_sharpDesign patterns in_c_sharp
Design patterns in_c_sharpCao Tuan
 
Object Oriented Analysis and Design
Object Oriented Analysis and DesignObject Oriented Analysis and Design
Object Oriented Analysis and DesignDr. C.V. Suresh Babu
 
Solid principles, Design Patterns, and Domain Driven Design
Solid principles, Design Patterns, and Domain Driven DesignSolid principles, Design Patterns, and Domain Driven Design
Solid principles, Design Patterns, and Domain Driven DesignIrwansyah Irwansyah
 
Object Oriented Best Practices - Summary
Object Oriented Best Practices - SummaryObject Oriented Best Practices - Summary
Object Oriented Best Practices - SummaryGanesh Samarthyam
 
The dependency inversion principle
The dependency inversion principleThe dependency inversion principle
The dependency inversion principlenavicorevn
 
Principles of Programming Languages - Lecture Notes
Principles of Programming Languages -  Lecture NotesPrinciples of Programming Languages -  Lecture Notes
Principles of Programming Languages - Lecture Notessuthi
 
Principles of-programming-languages-lecture-notes-
Principles of-programming-languages-lecture-notes-Principles of-programming-languages-lecture-notes-
Principles of-programming-languages-lecture-notes-Krishna Sai
 
Adopting Domain-Driven Design in your organization
Adopting Domain-Driven Design in your organizationAdopting Domain-Driven Design in your organization
Adopting Domain-Driven Design in your organizationAleix Morgadas
 
programacion orientado a abjetos poo
programacion orientado a abjetos pooprogramacion orientado a abjetos poo
programacion orientado a abjetos pooRasec De La Cruz
 
Fly Weight Design Pattern.pptx
Fly Weight Design Pattern.pptxFly Weight Design Pattern.pptx
Fly Weight Design Pattern.pptxSaifullah568810
 
DOC-20210303-WA0017..pptx,coding stuff in c
DOC-20210303-WA0017..pptx,coding stuff in cDOC-20210303-WA0017..pptx,coding stuff in c
DOC-20210303-WA0017..pptx,coding stuff in cfloraaluoch3
 
Collaborative modeling and metamodeling
Collaborative modeling and metamodelingCollaborative modeling and metamodeling
Collaborative modeling and metamodelingJuha-Pekka Tolvanen
 
Learning uml 2_part_1
Learning uml 2_part_1Learning uml 2_part_1
Learning uml 2_part_1Mark Gaad
 

Similar to Domain Driven Design Thoughts Mat Holroyd (20)

Writing good C# code for good cloud applications - Draft Oct 20, 2014
Writing good C# code for good cloud applications - Draft Oct 20, 2014Writing good C# code for good cloud applications - Draft Oct 20, 2014
Writing good C# code for good cloud applications - Draft Oct 20, 2014
 
Design patterns in_c_sharp
Design patterns in_c_sharpDesign patterns in_c_sharp
Design patterns in_c_sharp
 
Unit 1 OOSE
Unit 1 OOSE Unit 1 OOSE
Unit 1 OOSE
 
Object Oriented Analysis and Design
Object Oriented Analysis and DesignObject Oriented Analysis and Design
Object Oriented Analysis and Design
 
Dtacs
DtacsDtacs
Dtacs
 
Solid principles, Design Patterns, and Domain Driven Design
Solid principles, Design Patterns, and Domain Driven DesignSolid principles, Design Patterns, and Domain Driven Design
Solid principles, Design Patterns, and Domain Driven Design
 
Object Oriented Best Practices - Summary
Object Oriented Best Practices - SummaryObject Oriented Best Practices - Summary
Object Oriented Best Practices - Summary
 
Design patterns
Design patternsDesign patterns
Design patterns
 
The dependency inversion principle
The dependency inversion principleThe dependency inversion principle
The dependency inversion principle
 
Principles of Programming Languages - Lecture Notes
Principles of Programming Languages -  Lecture NotesPrinciples of Programming Languages -  Lecture Notes
Principles of Programming Languages - Lecture Notes
 
Principles of-programming-languages-lecture-notes-
Principles of-programming-languages-lecture-notes-Principles of-programming-languages-lecture-notes-
Principles of-programming-languages-lecture-notes-
 
Six of the Best
Six of the BestSix of the Best
Six of the Best
 
Adopting Domain-Driven Design in your organization
Adopting Domain-Driven Design in your organizationAdopting Domain-Driven Design in your organization
Adopting Domain-Driven Design in your organization
 
programacion orientado a abjetos poo
programacion orientado a abjetos pooprogramacion orientado a abjetos poo
programacion orientado a abjetos poo
 
Fly Weight Design Pattern.pptx
Fly Weight Design Pattern.pptxFly Weight Design Pattern.pptx
Fly Weight Design Pattern.pptx
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
DOC-20210303-WA0017..pptx,coding stuff in c
DOC-20210303-WA0017..pptx,coding stuff in cDOC-20210303-WA0017..pptx,coding stuff in c
DOC-20210303-WA0017..pptx,coding stuff in c
 
Collaborative modeling and metamodeling
Collaborative modeling and metamodelingCollaborative modeling and metamodeling
Collaborative modeling and metamodeling
 
Learning uml 2_part_1
Learning uml 2_part_1Learning uml 2_part_1
Learning uml 2_part_1
 
C++ & VISUAL C++
C++ & VISUAL C++ C++ & VISUAL C++
C++ & VISUAL C++
 

More from melbournepatterns (20)

An Introduction to
An Introduction to An Introduction to
An Introduction to
 
State Pattern from GoF
State Pattern from GoFState Pattern from GoF
State Pattern from GoF
 
Iterator Pattern
Iterator PatternIterator Pattern
Iterator Pattern
 
Iterator
IteratorIterator
Iterator
 
Concurrency Patterns
Concurrency PatternsConcurrency Patterns
Concurrency Patterns
 
Continuous Integration, Fast Builds and Flot
Continuous Integration, Fast Builds and FlotContinuous Integration, Fast Builds and Flot
Continuous Integration, Fast Builds and Flot
 
Command Pattern
Command PatternCommand Pattern
Command Pattern
 
Code Contracts API In .Net
Code Contracts API In .NetCode Contracts API In .Net
Code Contracts API In .Net
 
LINQ/PLINQ
LINQ/PLINQLINQ/PLINQ
LINQ/PLINQ
 
Gpu Cuda
Gpu CudaGpu Cuda
Gpu Cuda
 
Facade Pattern
Facade PatternFacade Pattern
Facade Pattern
 
Phani Kumar - Decorator Pattern
Phani Kumar - Decorator PatternPhani Kumar - Decorator Pattern
Phani Kumar - Decorator Pattern
 
Composite Pattern
Composite PatternComposite Pattern
Composite Pattern
 
Adapter Design Pattern
Adapter Design PatternAdapter Design Pattern
Adapter Design Pattern
 
Prototype Design Pattern
Prototype Design PatternPrototype Design Pattern
Prototype Design Pattern
 
Factory Method Design Pattern
Factory Method Design PatternFactory Method Design Pattern
Factory Method Design Pattern
 
Abstract Factory Design Pattern
Abstract Factory Design PatternAbstract Factory Design Pattern
Abstract Factory Design Pattern
 
A Little Lisp
A Little LispA Little Lisp
A Little Lisp
 
State Pattern in Flex
State Pattern in FlexState Pattern in Flex
State Pattern in Flex
 
Active Object
Active ObjectActive Object
Active Object
 

Recently uploaded

Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 

Recently uploaded (20)

Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 

Domain Driven Design Thoughts Mat Holroyd

  • 1. Chapter 1 1. The language used between developers and domain experts should be one and the same. (a) Developers should thus learn the domain language, while domain experts will likely need to learn some software modelling terms to understand diagrams etc. that the developers construct. (b) The language should be reflected in communication between the techs and the domain experts, but should also be used amongst the techs and amongst the domain experts. (c) Benefits are: i. Umabiguous understanding amongst different teams. This saves time as people start on the same page.. ii. Explanations can be more consise as terms do not have to be explained. 2. If the language is not used ubquitously, then the lanuage, may have problems (inconsistencies, ambiguities, etc.). (a) Schisms may evolve when the language is fractured, which are when team members use terms differently but don't realize it. 3. A diagram is not the model. Rather, a diagram helps people visualize the domain, or parts of it, but it does and should not explain everything. (a) Detailed diagrams require effort to construct and effort to understand. (b) Although it may be tempting to created detailed UML, UML to code generation is limited to what that particular diagraming method can display. As UML has trouble conveying the meaning and intent of an object (for instance), then the diagram is already limited in how much of the domain it can display. 4. The detail should be in the code. Documents should complement the code and speech. (a) Documents that state what the code does explicitly are unnecessary. The codes is already explicit. Instead documents that are less detailed can serve to introduce someone to the code as code by itself can be overwhelming and hard to understand. (b) A document has costs associated with it, that should be understood. i. The language used and the model a document explains should be kept up to date, or the document should be archived. Chapter 3 1. Emphasis should be on increasing understaing, not on modelling per se. Understanding comes with doing, not thinking alone. (a) The dogma that the steps of a software cycle are separable and distinct, in so far as isolating teams therefrom can be beneficial, is untrue. The maleable logic that is software means unlimited solutions, with an enormous number of 'gotcha's'- analysts and designers will miss unforseen but very specific problems that the implementers will come across. (b) The implementers then have problems in negotiating these inevitable problems. They must come up with unsatisfactory solutions in the code; ignore parts of the model; or take time convincing the designers and/or analysists to redo the model, which may or may not solve the problem until once again it comes back to implementation. (c) In contrast to missing important problems, designers and analysist may waste time analyizing something that is trivial to implement. 2. Relevance of the model is of upmost importance. (a) A model with little relevance means the code is a mechanism that does useful things but with no explanation. Hence if a model does exist, changing it has no relevance to how the code should change. (b) Hence the model should be relevant to both the domain and the implementation. Serving one should not sacrifice the other.
  • 2. (c) Suggested to design a proportion in a very literal way. Then revist to make it more natural to the software domain. Demand a single model even as gaining deeper insight. 3. Avoid implied abstractions. (a) If you create a system that does meaningful work, but has no meaningful name attached to it, change it. The system should be reexamined to gain insight into what is really going on. 4. Don't hide abstractions. (a) If the system treats part of the domain in a certain and specific way, don't hide it from the user. In all likelihood, if that system adheres to the principles of some other domain, then an informed user can take advantage of that. Hiding these details may cause confusion as the user gets unexpected behaviour. 5. Unempowered developers (insofar as the model is concerned) means the model will have less relevance to them then how it should be. (a) Designers with little implementing experience do not understand how easy the implementation can be changed to suit a change in the model. 6. Implementers need to know how to express the model in the code. (a) Hence coders need to know the model well. Contact with the domain experts is good. (b) Part II 1. Understand fundamentals of support Model driven design. (a) Knowing how it works means teams can compromise with competing priorities without sacrificing import gains. Chapter 4 1. The domain objects are likely to only make up a small part of the software system. (a) Their size is disproportional to their size. (b) Hence it can be easy to lose which objects in the whole system are the really important ones. 2. In OO languages, model-related concepts are imbedded in GUI, database and other, non- centralized components. (a) Easy to do in short run, but causes problems later on. Esentially the model is not 'in' a specific group of objects, rather the larger system is the model. Thus more of the system needs to change when the model changes. 3. Layered architecture helps model driven design, with the model layer separated. (a) Suggested that should have 4 layers i. Presentation layer (Show information to user, gets input from user) ii. Application layer (Coordinates tasks between model objects, but does no domain logic) iii. Domain layer (The heart of the system. Represents the domains concepts). iv. Infrastructure (Provides technical functionalities to higher layers, such as persistance as UI widgets). (b) The separation of the domain layer is crucial for domain driven design- it may be beneficial to combine other layers, or have multiple infrastructure layes for instance, as the context demands. (c) Once separated, the domain objects are free to express the domain in powerful ways. 4. Relating layers is a difficult task. (a) Frameworks help, as they usually provide either a design to separate layers in a well
  • 3. understood way, or they provide classes that simplify supporting layers. (b) Becareful though, as frameworks should not be used excessively, or else there's a risk of constraining developers. 5. The domain layer is the domain model in code. (a) Hence other software concerns cannot be in the model level, as that would change what it is. 6. Smart UI can be a suitable replacement for heavy-weight domain driven design. (a) Smart UI have logic in the UI. i. Easy for beginner programmers; takes advantage of 4GL. ii. Falls down when domain is complex., as less reuse. (b) Using a flexible language does not mean a flexible program. If going to do smart UI, don't waste time with a low-level language- use the tools for the job. Conversely, for domain driven design need flexible languages like Java, C#. 7. Isolating a model in a layer helps maintain it, but faces threats on other fronts. (a) Other teams may have different models for the same domain. (b) Parts of the system may not be fully integrated into the model. Chapter 5 1. Entities (a) Things within the model whose identity matters. Seats in a stadium may or may not be entities, despite the fact that all seats are 'unique' in a real world sense. In a stadium event management program, the identity of a seat would matter if it was allocated seating. However, if its just general admission, its meaningless to include the identity of seats in the model (that is, identity does not matter, and thus they are not entities). (b) Entities may change over time, in terms of what object(s) represent them in the implementation. Conversely, the attributes of entity may be the same as another entity. Hence identifying an entity should not rely on attributes. (c) Note that using the reference of an object in languages like Java may not be good enough, as persistence and networking will break this. (d) May use a combination of attributes to create an identity (a key), but need to be careful. 2. Value objects (a) Things whose identity does not matter, only their value(s). They are used to describe things. For instance, the color red; the numbers 5 are value objects. (b) As a general rule, create a value object when you only care about the attributes of the element. (c) Value objects are easier to maintain then entities and lend themselves to optimizations that entities do not. (d) Value objects should be immutable. One advantage of this is they can be shared (performance). They can only be mutable if they are not shared. (e) Because identity of value objects does not matter, they can be freely copied wholy without concern for consequences. (f) Value objects should not have bidirectional relationships. The concept makes no sense. If model is asking for it, then maybe one of the value objects should actually be an entity. 3. Services (a) When an action does not naturally belong to any entities or value objects within the domain, creating a standalone service interface solve this problem in a simple way. (b) The service interface should be define in terms of other domain objects. (c) The operation should be stateless. That is, the service will not be affected by its history. (d) Services should be separated into their relevant layers. That is, technical services like email notification should be in the infrastructure, while exporting a list of accounts to a
  • 4. file should be in the application layer. (e) Service can help reduce complexity as responsibility for particular actions is less likely to leak into application layer objects. (f) How a service is provided is so important as the design decision to create it in the first place. A singleton class can neatly act as a service provider. 4. Modules (a) Good tool to break up parts of a system. Low coupling and high cohesion can be explained with the ubiquitous language. i. High cohesion = easier to think about what a module does ii. Low coupling = easier to think about a module in isolation. (b) Separating the model layer into distinct modules is useful, but deviding the other layers into modules should be treated as separate cases. That is, the modules in other layers should not follow the modules in the model layer unless it is useful to do so. (c) Module names should be part of the ubiquitous language.