The first day slides of the Domain Driven Design course that I imparted on Schibsted Spain.
They talk about technical debt, domain modeling, model driven design and SOLID principles.
Domain Driven Design Development Spring PortfolioSrini Penchikala
The document discusses the benefits of exercise for mental health. Regular physical activity can help reduce anxiety and depression and improve mood and cognitive function. Exercise causes chemical changes in the brain that may help alleviate symptoms of mental illness and boost overall mental well-being.
Présentation sur le Domain-Driven Design par Gérard Dethier (Guardis) aux Geeks Anonymes le 10 novembre 2017.
Vidéo de la conférence : https://youtu.be/OmrtGo68E6M
A Practical Guide to Domain Driven Design: Presentation Slidesthinkddd
Tonight I presented on Domain Driven Design to the Alt.Net group in Sydney at the invite of Richard Banks.
As a follow up, attached are the slides I used, feel free to distribute and use on the Creative Commons Licence
This document discusses Domain-Driven Design (DDD) and provides guidance on its implementation. It explains that DDD focuses on understanding and modeling the core domain of a business to manage complexity. It recommends dividing a domain into subdomains and identifying the core domain. It also discusses building models through collaboration and ensuring the code model aligns with the conceptual model. The document provides an overview of key DDD concepts like bounded contexts, aggregates, domain events, and tactical patterns to structure the solution space.
This document outlines the concepts and techniques of Domain-Driven Design (DDD). It begins with basic concepts like the ubiquitous language and domain model. It then covers strategic design patterns such as bounded contexts and context mapping. Next, it discusses tactical design building blocks like entities, aggregates, and repositories. Finally, it briefly introduces related patterns like CQRS, event sourcing, and event-driven architectures. The document is intended to provide an overview of DDD from basic concepts to advanced patterns in both the strategic and tactical spheres.
Domain Driven Design (DDD) is a software design approach that focuses on modeling a domain accurately. It uses ubiquitous language, bounded contexts, and explicit domain models. The key aspects of DDD include developing a shared model with domain experts, separating concerns into bounded contexts, and iteratively refining domain models through close collaboration between technical and domain teams. DDD aims to produce software designs that are more aligned with the mental models of users and stakeholders in a complex domain.
This document provides an overview of domain-driven design (DDD). It discusses DDD as an approach to managing complex business requirements by modeling the domain and collaborating with stakeholders. Key aspects of DDD covered include bounded contexts, entities, value objects, aggregates, domain services, and the distinction between anemic and rich domain models. Common DDD patterns such as repositories, factories, and strategies are also outlined. The document concludes by noting related approaches like event-driven architecture, microservices, and the importance of clean code and testing with DDD.
Domain Driven Design Development Spring PortfolioSrini Penchikala
The document discusses the benefits of exercise for mental health. Regular physical activity can help reduce anxiety and depression and improve mood and cognitive function. Exercise causes chemical changes in the brain that may help alleviate symptoms of mental illness and boost overall mental well-being.
Présentation sur le Domain-Driven Design par Gérard Dethier (Guardis) aux Geeks Anonymes le 10 novembre 2017.
Vidéo de la conférence : https://youtu.be/OmrtGo68E6M
A Practical Guide to Domain Driven Design: Presentation Slidesthinkddd
Tonight I presented on Domain Driven Design to the Alt.Net group in Sydney at the invite of Richard Banks.
As a follow up, attached are the slides I used, feel free to distribute and use on the Creative Commons Licence
This document discusses Domain-Driven Design (DDD) and provides guidance on its implementation. It explains that DDD focuses on understanding and modeling the core domain of a business to manage complexity. It recommends dividing a domain into subdomains and identifying the core domain. It also discusses building models through collaboration and ensuring the code model aligns with the conceptual model. The document provides an overview of key DDD concepts like bounded contexts, aggregates, domain events, and tactical patterns to structure the solution space.
This document outlines the concepts and techniques of Domain-Driven Design (DDD). It begins with basic concepts like the ubiquitous language and domain model. It then covers strategic design patterns such as bounded contexts and context mapping. Next, it discusses tactical design building blocks like entities, aggregates, and repositories. Finally, it briefly introduces related patterns like CQRS, event sourcing, and event-driven architectures. The document is intended to provide an overview of DDD from basic concepts to advanced patterns in both the strategic and tactical spheres.
Domain Driven Design (DDD) is a software design approach that focuses on modeling a domain accurately. It uses ubiquitous language, bounded contexts, and explicit domain models. The key aspects of DDD include developing a shared model with domain experts, separating concerns into bounded contexts, and iteratively refining domain models through close collaboration between technical and domain teams. DDD aims to produce software designs that are more aligned with the mental models of users and stakeholders in a complex domain.
This document provides an overview of domain-driven design (DDD). It discusses DDD as an approach to managing complex business requirements by modeling the domain and collaborating with stakeholders. Key aspects of DDD covered include bounded contexts, entities, value objects, aggregates, domain services, and the distinction between anemic and rich domain models. Common DDD patterns such as repositories, factories, and strategies are also outlined. The document concludes by noting related approaches like event-driven architecture, microservices, and the importance of clean code and testing with DDD.
Lviv IT Arena is a conference specially designed for programmers, designers, developers, top managers, inverstors, entrepreneur and startuppers. Annually it takes place on 2-4 of October in Lviv at the Arena Lviv stadium. In 2015 conference gathered more than 1400 participants and over 100 speakers from companies like Facebook. FitBit, Mail.ru, HP, Epson and IBM. More details about conference at itarene.lviv.ua.
This document provides an overview and introduction to domain-driven design (DDD). It discusses the core principles of DDD, including focusing on modeling the domain, capturing domain knowledge in software models, and structuring software around domain concepts. The document also summarizes some common DDD patterns and techniques for managing complexity, such as ubiquitous language, layered architecture, aggregates, entities, value objects, services, factories, and repositories. The overall goal of DDD is to build software that is closely aligned with the conceptual model of the problem domain.
A Context Map will visualize your system: cluttered models, too much or not enough communication, dependencies on other systems are just some of the insights you'll gain if your start using them
This document provides an overview of domain-driven design (DDD). Some key points:
DDD focuses on modeling the core domain and business logic of an application rather than technical implementation details. It advocates building a domain model that represents the problem domain and expressing that model in code.
Some DDD concepts discussed include entities, value objects, aggregates, repositories, domain services, bounded contexts, and context mapping. The document explains how to identify and define these concepts to structure an application around the business domain.
Following DDD principles like defining a ubiquitous language, building models driven by the domain, separating bounded contexts, and mapping dependencies can help produce applications that are more maintainable, scalable, and focused on
Modelling a complex domain with Domain-Driven DesignNaeem Sarfraz
Domain-Driven Design is an approach to modelling business complexity explicitly in your software. This deck of slides runs through the key concepts focusing on both the strategic and tactical aspects of DDD.
Domain-Driven Design (DDD) is very useful set of tools to tackle complexity in a software projects. However, many software developers never heard of it, yet most of the one who do emphasize too much on the technical implementation.
This slide will explain what is DDD and why, and also what is its core.
Domain-driven design is a collaborative process involving both domain experts and software practitioners. This high-level overview takes a look at the driving principles behind domain-driven design. It also explores domain-driven design's building block patterns, supple design, strategic design, and distillation of the core.
This document provides an introduction and overview of domain driven design (DDD). It defines key DDD concepts like domain, ubiquitous language, bounded context, and domain model. It explains how to apply DDD patterns like layered architecture, entity model, value model, aggregate model, and service model. It also discusses how to unify domain models and implement DDD in practice using techniques like ubiquitous language, bounded contexts, and entity/value/aggregate models. The document aims to help readers understand the problem DDD solves, core DDD principles and patterns, and how to apply DDD on real projects.
Domain-driven design (DDD) is an approach to software development that focuses on modeling a complex domain into subdomains. It involves collaboratively exploring the problem domain to build a ubiquitous language and domain model. The domain model partitions the problem into bounded contexts aligned to core domains and subdomains. Strategic design develops the domain model, while tactical design implements the solution as autonomous bounded contexts and microservices. DDD aims to maximize delivering business value through close collaboration between technical and business teams in understanding and modeling the domain.
This document provides an overview of domain-driven design (DDD) patterns and concepts. It discusses when DDD is applicable, specifically for complex systems. The core concepts of DDD building blocks are then summarized, including layered architecture, entities, value objects, aggregates, factories, repositories, services, and domain events. Examples are provided for some of the concepts. Meeting topics are listed that will cover strategic patterns, tactical patterns, communication tips, and code examples related to DDD.
CQRS recipes or how to cook your architectureThomas Jaskula
The principles of CQRS is very simple. Separate Reads from Writes. Although when you try to implement it in you can face many technical and functional problems. This presentation starts from very simple architecture and while business requirements are added we consider other architecture ending with a CQRS + DDD + ES one.
The document discusses Domain Driven Design (DDD) and the Hexagonal Architecture. It describes DDD concepts like bounded contexts, core domains, ubiquitous language, and aggregates. It also explains different types of context mapping. The Hexagonal Architecture separates an application into three main parts - the domain model, ports, and adapters. Ports define application interfaces while adapters act as bridges between the application and external interfaces or services.
Domain Driven Design Big Picture Strategic PatternsMark Windholtz
The document discusses Domain-Driven Design (DDD), an approach to software development for complex problems. It provides an overview of DDD and strategic patterns for organizing large projects with multiple teams, such as defining bounded contexts and context maps. Context maps describe the relationships between models, including shared kernels, customer/supplier, and conformist relationships. The document emphasizes defining a ubiquitous language within each context and mapping contexts to understand integration strategies at a large scale.
Strategic distillation is a domain-driven design technique used to refine a complex domain model. It involves separating the core domain from other domains, writing documents to describe the core domain at different levels of abstraction, and partitioning complex parts of the model. The goal is to distill the core domain concepts and their relationships to make the model easier to understand and change over time.
How to Implement Domain Driven Design in Real Life SDLCAbdul Karim
The document discusses the traditional approach to software development and some of its shortcomings. It then introduces Domain-Driven Design (DDD) as an alternative approach that focuses on designing the system around the problem domain from the top-down rather than the bottom-up. Some key DDD concepts discussed include ubiquitous language, core domain, bounded contexts, entities, value objects, aggregates and aggregate roots, and persistence ignorance. The document uses examples from designing a residential building to help explain these DDD concepts.
DDD Strategic Design - Context Maps - Paulo Clavijo - April 2018Paulo Clavijo
This document provides an introduction to context maps in domain-driven design. It discusses that while a single unified domain model is ideal, models typically fragment into multiple bounded contexts. Context maps identify each model and define the bounded context and points of contact between contexts. The document outlines several types of relationships between bounded contexts like shared kernel, customer/supplier, and anticorruption layer. It emphasizes that context maps should reflect the true practice of development teams.
This keynote was presented by Rebecca Wirfs-Brock at Explore DDD 2017.
The ouroboros (οὐροβόρος in the original Greek) is an image or archetype of a serpent shaped into a circle, clinging to or devouring its own tail in an endless cycle of self-destruction, self-creation, and self-renewal. Becoming a good software designer sometimes feels like that.
Over time, we build up our personal toolkit of design heuristics. To grow as designers, we need to do more than simply design and implement working software. We need to examine and reflect on our work, put our own spin on the advice of experts, and continue to learn better ways of designing.
Domain Driven Design main concepts
This presentation is a summary of the book "Domain Driven Design" from InfoQ.
Here is the link: http://www.infoq.com/minibooks/domain-driven-design-quickly
This document discusses the key principles of Domain Driven Design (DDD), which is a software development methodology that focuses on building software that closely matches the business domain. Some key points include: getting domain experts involved to capture domain knowledge; modeling the domain to develop a shared language; refactoring when domain concepts are implicit or when deeper insights are discovered; and focusing on the business domain over technical purity. The overall goal is to develop software that lives within the domain it was created for.
This document provides an introduction to domain-driven design (DDD). It defines DDD as an approach where the application's domain model reflects the real business domain and core domain is the primary focus. It discusses DDD principles like ubiquitous language, domain encapsulation, and technical simplicity. The benefits of DDD include improved communication through a shared language, a modular and extensible domain model, and the domain rules and logic being encapsulated in one place.
Domain Driven Design (DDD) involves strategic design practices to develop a software model that closely represents the business domain. It focuses on bringing together domain experts and developers to develop a shared ubiquitous language. The domain is divided into subdomains and core domains, with the core domain being the most important to the business. Models are developed for each bounded context, which represents an explicit boundary within a subdomain. Following DDD results in software that makes more sense to both the business and technical aspects of the organization.
Lviv IT Arena is a conference specially designed for programmers, designers, developers, top managers, inverstors, entrepreneur and startuppers. Annually it takes place on 2-4 of October in Lviv at the Arena Lviv stadium. In 2015 conference gathered more than 1400 participants and over 100 speakers from companies like Facebook. FitBit, Mail.ru, HP, Epson and IBM. More details about conference at itarene.lviv.ua.
This document provides an overview and introduction to domain-driven design (DDD). It discusses the core principles of DDD, including focusing on modeling the domain, capturing domain knowledge in software models, and structuring software around domain concepts. The document also summarizes some common DDD patterns and techniques for managing complexity, such as ubiquitous language, layered architecture, aggregates, entities, value objects, services, factories, and repositories. The overall goal of DDD is to build software that is closely aligned with the conceptual model of the problem domain.
A Context Map will visualize your system: cluttered models, too much or not enough communication, dependencies on other systems are just some of the insights you'll gain if your start using them
This document provides an overview of domain-driven design (DDD). Some key points:
DDD focuses on modeling the core domain and business logic of an application rather than technical implementation details. It advocates building a domain model that represents the problem domain and expressing that model in code.
Some DDD concepts discussed include entities, value objects, aggregates, repositories, domain services, bounded contexts, and context mapping. The document explains how to identify and define these concepts to structure an application around the business domain.
Following DDD principles like defining a ubiquitous language, building models driven by the domain, separating bounded contexts, and mapping dependencies can help produce applications that are more maintainable, scalable, and focused on
Modelling a complex domain with Domain-Driven DesignNaeem Sarfraz
Domain-Driven Design is an approach to modelling business complexity explicitly in your software. This deck of slides runs through the key concepts focusing on both the strategic and tactical aspects of DDD.
Domain-Driven Design (DDD) is very useful set of tools to tackle complexity in a software projects. However, many software developers never heard of it, yet most of the one who do emphasize too much on the technical implementation.
This slide will explain what is DDD and why, and also what is its core.
Domain-driven design is a collaborative process involving both domain experts and software practitioners. This high-level overview takes a look at the driving principles behind domain-driven design. It also explores domain-driven design's building block patterns, supple design, strategic design, and distillation of the core.
This document provides an introduction and overview of domain driven design (DDD). It defines key DDD concepts like domain, ubiquitous language, bounded context, and domain model. It explains how to apply DDD patterns like layered architecture, entity model, value model, aggregate model, and service model. It also discusses how to unify domain models and implement DDD in practice using techniques like ubiquitous language, bounded contexts, and entity/value/aggregate models. The document aims to help readers understand the problem DDD solves, core DDD principles and patterns, and how to apply DDD on real projects.
Domain-driven design (DDD) is an approach to software development that focuses on modeling a complex domain into subdomains. It involves collaboratively exploring the problem domain to build a ubiquitous language and domain model. The domain model partitions the problem into bounded contexts aligned to core domains and subdomains. Strategic design develops the domain model, while tactical design implements the solution as autonomous bounded contexts and microservices. DDD aims to maximize delivering business value through close collaboration between technical and business teams in understanding and modeling the domain.
This document provides an overview of domain-driven design (DDD) patterns and concepts. It discusses when DDD is applicable, specifically for complex systems. The core concepts of DDD building blocks are then summarized, including layered architecture, entities, value objects, aggregates, factories, repositories, services, and domain events. Examples are provided for some of the concepts. Meeting topics are listed that will cover strategic patterns, tactical patterns, communication tips, and code examples related to DDD.
CQRS recipes or how to cook your architectureThomas Jaskula
The principles of CQRS is very simple. Separate Reads from Writes. Although when you try to implement it in you can face many technical and functional problems. This presentation starts from very simple architecture and while business requirements are added we consider other architecture ending with a CQRS + DDD + ES one.
The document discusses Domain Driven Design (DDD) and the Hexagonal Architecture. It describes DDD concepts like bounded contexts, core domains, ubiquitous language, and aggregates. It also explains different types of context mapping. The Hexagonal Architecture separates an application into three main parts - the domain model, ports, and adapters. Ports define application interfaces while adapters act as bridges between the application and external interfaces or services.
Domain Driven Design Big Picture Strategic PatternsMark Windholtz
The document discusses Domain-Driven Design (DDD), an approach to software development for complex problems. It provides an overview of DDD and strategic patterns for organizing large projects with multiple teams, such as defining bounded contexts and context maps. Context maps describe the relationships between models, including shared kernels, customer/supplier, and conformist relationships. The document emphasizes defining a ubiquitous language within each context and mapping contexts to understand integration strategies at a large scale.
Strategic distillation is a domain-driven design technique used to refine a complex domain model. It involves separating the core domain from other domains, writing documents to describe the core domain at different levels of abstraction, and partitioning complex parts of the model. The goal is to distill the core domain concepts and their relationships to make the model easier to understand and change over time.
How to Implement Domain Driven Design in Real Life SDLCAbdul Karim
The document discusses the traditional approach to software development and some of its shortcomings. It then introduces Domain-Driven Design (DDD) as an alternative approach that focuses on designing the system around the problem domain from the top-down rather than the bottom-up. Some key DDD concepts discussed include ubiquitous language, core domain, bounded contexts, entities, value objects, aggregates and aggregate roots, and persistence ignorance. The document uses examples from designing a residential building to help explain these DDD concepts.
DDD Strategic Design - Context Maps - Paulo Clavijo - April 2018Paulo Clavijo
This document provides an introduction to context maps in domain-driven design. It discusses that while a single unified domain model is ideal, models typically fragment into multiple bounded contexts. Context maps identify each model and define the bounded context and points of contact between contexts. The document outlines several types of relationships between bounded contexts like shared kernel, customer/supplier, and anticorruption layer. It emphasizes that context maps should reflect the true practice of development teams.
This keynote was presented by Rebecca Wirfs-Brock at Explore DDD 2017.
The ouroboros (οὐροβόρος in the original Greek) is an image or archetype of a serpent shaped into a circle, clinging to or devouring its own tail in an endless cycle of self-destruction, self-creation, and self-renewal. Becoming a good software designer sometimes feels like that.
Over time, we build up our personal toolkit of design heuristics. To grow as designers, we need to do more than simply design and implement working software. We need to examine and reflect on our work, put our own spin on the advice of experts, and continue to learn better ways of designing.
Domain Driven Design main concepts
This presentation is a summary of the book "Domain Driven Design" from InfoQ.
Here is the link: http://www.infoq.com/minibooks/domain-driven-design-quickly
This document discusses the key principles of Domain Driven Design (DDD), which is a software development methodology that focuses on building software that closely matches the business domain. Some key points include: getting domain experts involved to capture domain knowledge; modeling the domain to develop a shared language; refactoring when domain concepts are implicit or when deeper insights are discovered; and focusing on the business domain over technical purity. The overall goal is to develop software that lives within the domain it was created for.
This document provides an introduction to domain-driven design (DDD). It defines DDD as an approach where the application's domain model reflects the real business domain and core domain is the primary focus. It discusses DDD principles like ubiquitous language, domain encapsulation, and technical simplicity. The benefits of DDD include improved communication through a shared language, a modular and extensible domain model, and the domain rules and logic being encapsulated in one place.
Domain Driven Design (DDD) involves strategic design practices to develop a software model that closely represents the business domain. It focuses on bringing together domain experts and developers to develop a shared ubiquitous language. The domain is divided into subdomains and core domains, with the core domain being the most important to the business. Models are developed for each bounded context, which represents an explicit boundary within a subdomain. Following DDD results in software that makes more sense to both the business and technical aspects of the organization.
An Introduction to Domain Driven Design in PHPChris Renner
We use PHP to solve problems. But as software projects grow and the business needs increase, how do we manage the complexity and still produce readable and maintainable code? Domain Driven Design is a set of concepts and practices that, when applied appropriately, help us manage complexity in large scale projects. In this talk, we will explore the broad points of DDD. I’ll also share tips, patterns and lessons-learned gained from my experiences building PHP software for complicated business processes.
This document provides an overview of domain-driven design (DDD). It defines key DDD concepts like domain, model, ubiquitous language, bounded context, entities, value objects, aggregates, and services. The document explains that DDD is a software design approach for complex domains that models the domain and represents it in code. It focuses on exploring models collaboratively with domain experts and keeping the implementation tightly bound to the model.
DDD with ASP.NET MVC - Steve Smith | FalafelCON 2014FalafelSoftware
Domain-Driven Design provides a set of principles and patterns that are useful for tackling complex software problems. In this session, we'll review a few DDD concepts and demonstrate how they can be applied within an ASP.NET MVC Solution to keep concerns separated and implementation details loosely coupled from business logic and your domain model.
This document discusses Domain-Driven Design (DDD) and how it can be applied to ASP.NET MVC projects. It covers DDD concepts like ubiquitous language, bounded contexts, entities, value objects, domain services, and domain events. It also discusses how to structure an MVC project to separate the domain model from the rest of the application using patterns like layered architecture and ports and adapters. The document argues that DDD can provide benefits like flexibility, manageable complexity, and centralized business logic, though it may require more time and effort to implement.
Domain-driven design (DDD) is an approach that connects software implementation to an evolving model of the core business concepts. It focuses on placing the project's primary emphasis on the domain and domain logic. DDD provides a structure for design decisions that accelerate projects dealing with complex domains. The core aspects of DDD include defining a ubiquitous language, building domain models, separating domain models from infrastructure concerns, and establishing context boundaries for models. DDD aims to create a common language between business and technical stakeholders and improve reusability and testability of domain objects.
This document provides an introduction to domain-driven design (DDD) and discusses how following DDD paradigms can help an IT department better achieve business goals and adapt quickly to changing market conditions. It notes that business complexity grows rapidly, and finding ways to meet business objectives is key. The document outlines DDD concepts like the ubiquitous language, bounded context, and layered architecture. It also lists common DDD building blocks like entities, value objects, aggregates, services, factories, and repositories. It then gives an example of starting a DDD implementation with entities and adding factories, services, repositories, and aggregates. The document concludes that improving the domain layer is an ongoing, iterative process aligned with business needs.
The document provides 10 pieces of advice for software architects. It begins by introducing Eberhard Wolff and his background. Some of the key advice includes: understanding that the role of architect has changed with agile development and they are not managers; focusing on non-functional requirements and quality; caring about architecture and code quality rather than just diagrams; measuring code quality using tools; and ensuring proper dependency management to maintain architecture. The architect role is compared to that of a craftsman focusing on continual improvement rather than being separated from developers.
My short talk about trends and industry practices in Software Engineering in one of the classes in Master of Science in Information Technology at Ateneo de Davao University
This document provides 10 tips for software architects. It begins by introducing the author and their background. It then discusses that the role of a software architect is not well-defined and involves managing non-functional requirements and quality. Architects are responsible for defining and enforcing architecture. The document discusses how architects fit into agile development methodologies like Scrum. It argues that "architect" may not be the best metaphor and discusses an alternative view of architects as master craftsmen. The tips emphasize having your own opinion, improving vocabulary, eating your own dog food, avoiding broken windows, using domain-driven design strategically, caring about code and architecture, measuring and reducing complexity, and managing dependencies.
The domain model is an abstraction of the problem domain that your system supports. It contains the objects and operations that are crucial to your system and its users. Therefore the design of the domain model deserves the utmost care and attention. In this session you will be introduced to Domain-Driven Design and you will learn how to put Domain-Driven Design (DDD) into practice. We will explore how to apply DDD on tactical level to design a rich domain model that encapsulates behaviour, protects its invariants and can be tested in isolation from its runtime environment
Domain driven design is help as part of software development for proper deliver of software applications.
It will help on strategic planning of software design and delivery.
Art of refactoring - Code Smells and Microservices AntipatternsEl Mahdi Benzekri
The document discusses refactoring code for simplicity and reducing technical debt. It defines refactoring as improving code without adding new functionality. Code smells are discussed as indicators that code may need refactoring, such as duplicate code, comments, and dead code. Specific refactoring techniques are provided for different types of code smells like dispensables and bloaters. Microservice bad smells are also examined like wrong service cuts, hardcoded endpoints, and shared databases. The document provides examples and references for further reading on refactoring code and microservices.
.NET Fest 2019. Halil Ibrahim Kalkan. Implementing Domain Driven DesignNETFest
“Domain Driven Design is an approach to software development for complex needs by connecting the implementation to an evolving model.”
While there are many resources on the web about the DDD, they are generally theoretical rather than useful practical guides. One reason is that a DDD implementation quite varies depending on your domain and culture. However, it is still possible to provide some explicit rules those can help you while designing your code base.
This talk starts by introducing the DDD and providing a layering model based on the DDD and the Clean Architecture. It then introduces the core building of an application built on the DDD principles.
In the second part of the talk, it shows some strict coding rules for the core building blocks with real code examples and suggestions. These rules are essential to build a large scale application implements DDD patterns & practices.
While the solution structure and code samples are based on .NET and C#, the talk is useful for developers and architects working with any server side technology.
Prashant technical practices-tdd for xebia eventXebia India
Theme: Agile Technical Practices
Epic: TDD implementation
Stories:
Context of TDD
What is TDD
Response of Developers to TDD implementation
Practices complimenting TDD
Success with TDD
- DDD is designed around an onion architecture for loose coupling between domains, applications, and infrastructure
- Event storming helps gather structured information to understand the business domain and requirements
- Entities have unique IDs and are mutable while value objects describe entities and are immutable
- Aggregates group related entities and value objects together, with the root entity accessible from outside
- Invariants, anti-corruption layers, and domain events help model the business logic and handle changes
The presentation discusses software design. It discusses the characteristics of a good and bad design. Then it talks about how to achieve a good design. Then finally we discuss the SOLID Principles of Object Oriented Design. These are 5 principles compiled by Rober Cecil Martin aka Uncle Bob. The benefit of these principles is to achieve a good OO design which is high in cohesion and low in coupling thus easily adaptable to change
Rails is optimised for the first weeks of development. At the later phases it's no longer the speed of adding new views and data that matters. It's often more about the different (and changing!) ways of using the data. The business logic gets more complicated.
DDD has answers to those problems. Detecting the bounded contexts is the crucial skill. Choose which parts of the app leave as CRUD and which could go into more of the tactical DDD.
Similar to Schibsted Spain - Day 1 - DDD Course (20)
Utilocate offers a comprehensive solution for locate ticket management by automating and streamlining the entire process. By integrating with Geospatial Information Systems (GIS), it provides accurate mapping and visualization of utility locations, enhancing decision-making and reducing the risk of errors. The system's advanced data analytics tools help identify trends, predict potential issues, and optimize resource allocation, making the locate ticket management process smarter and more efficient. Additionally, automated ticket management ensures consistency and reduces human error, while real-time notifications keep all relevant personnel informed and ready to respond promptly.
The system's ability to streamline workflows and automate ticket routing significantly reduces the time taken to process each ticket, making the process faster and more efficient. Mobile access allows field technicians to update ticket information on the go, ensuring that the latest information is always available and accelerating the locate process. Overall, Utilocate not only enhances the efficiency and accuracy of locate ticket management but also improves safety by minimizing the risk of utility damage through precise and timely locates.
OpenMetadata Community Meeting - 5th June 2024OpenMetadata
The OpenMetadata Community Meeting was held on June 5th, 2024. In this meeting, we discussed about the data quality capabilities that are integrated with the Incident Manager, providing a complete solution to handle your data observability needs. Watch the end-to-end demo of the data quality features.
* How to run your own data quality framework
* What is the performance impact of running data quality frameworks
* How to run the test cases in your own ETL pipelines
* How the Incident Manager is integrated
* Get notified with alerts when test cases fail
Watch the meeting recording here - https://www.youtube.com/watch?v=UbNOje0kf6E
Hand Rolled Applicative User ValidationCode KataPhilip Schwarz
Could you use a simple piece of Scala validation code (granted, a very simplistic one too!) that you can rewrite, now and again, to refresh your basic understanding of Applicative operators <*>, <*, *>?
The goal is not to write perfect code showcasing validation, but rather, to provide a small, rough-and ready exercise to reinforce your muscle-memory.
Despite its grandiose-sounding title, this deck consists of just three slides showing the Scala 3 code to be rewritten whenever the details of the operators begin to fade away.
The code is my rough and ready translation of a Haskell user-validation program found in a book called Finding Success (and Failure) in Haskell - Fall in love with applicative functors.
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j
Dr. Jesús Barrasa, Head of Solutions Architecture for EMEA, Neo4j
Découvrez les dernières innovations de Neo4j, et notamment les dernières intégrations cloud et les améliorations produits qui font de Neo4j un choix essentiel pour les développeurs qui créent des applications avec des données interconnectées et de l’IA générative.
Flutter is a popular open source, cross-platform framework developed by Google. In this webinar we'll explore Flutter and its architecture, delve into the Flutter Embedder and Flutter’s Dart language, discover how to leverage Flutter for embedded device development, learn about Automotive Grade Linux (AGL) and its consortium and understand the rationale behind AGL's choice of Flutter for next-gen IVI systems. Don’t miss this opportunity to discover whether Flutter is right for your project.
Transform Your Communication with Cloud-Based IVR SolutionsTheSMSPoint
Discover the power of Cloud-Based IVR Solutions to streamline communication processes. Embrace scalability and cost-efficiency while enhancing customer experiences with features like automated call routing and voice recognition. Accessible from anywhere, these solutions integrate seamlessly with existing systems, providing real-time analytics for continuous improvement. Revolutionize your communication strategy today with Cloud-Based IVR Solutions. Learn more at: https://thesmspoint.com/channel/cloud-telephony
Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...kalichargn70th171
A dynamic process unfolds in the intricate realm of software development, dedicated to crafting and sustaining products that effortlessly address user needs. Amidst vital stages like market analysis and requirement assessments, the heart of software development lies in the meticulous creation and upkeep of source code. Code alterations are inherent, challenging code quality, particularly under stringent deadlines.
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeAftab Hussain
Understanding variable roles in code has been found to be helpful by students
in learning programming -- could variable roles help deep neural models in
performing coding tasks? We do an exploratory study.
- These are slides of the talk given at InteNSE'23: The 1st International Workshop on Interpretability and Robustness in Neural Software Engineering, co-located with the 45th International Conference on Software Engineering, ICSE 2023, Melbourne Australia
Enterprise Resource Planning System includes various modules that reduce any business's workload. Additionally, it organizes the workflows, which drives towards enhancing productivity. Here are a detailed explanation of the ERP modules. Going through the points will help you understand how the software is changing the work dynamics.
To know more details here: https://blogs.nyggs.com/nyggs/enterprise-resource-planning-erp-system-modules/
E-commerce Application Development Company.pdfHornet Dynamics
Your business can reach new heights with our assistance as we design solutions that are specifically appropriate for your goals and vision. Our eCommerce application solutions can digitally coordinate all retail operations processes to meet the demands of the marketplace while maintaining business continuity.
Revolutionizing Visual Effects Mastering AI Face Swaps.pdfUndress Baby
The quest for the best AI face swap solution is marked by an amalgamation of technological prowess and artistic finesse, where cutting-edge algorithms seamlessly replace faces in images or videos with striking realism. Leveraging advanced deep learning techniques, the best AI face swap tools meticulously analyze facial features, lighting conditions, and expressions to execute flawless transformations, ensuring natural-looking results that blur the line between reality and illusion, captivating users with their ingenuity and sophistication.
Web:- https://undressbaby.com/
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j
Dr. Jesús Barrasa, Head of Solutions Architecture for EMEA, Neo4j
Découvrez les dernières innovations de Neo4j, et notamment les dernières intégrations cloud et les améliorations produits qui font de Neo4j un choix essentiel pour les développeurs qui créent des applications avec des données interconnectées et de l’IA générative.
Do you want Software for your Business? Visit Deuglo
Deuglo has top Software Developers in India. They are experts in software development and help design and create custom Software solutions.
Deuglo follows seven steps methods for delivering their services to their customers. They called it the Software development life cycle process (SDLC).
Requirement — Collecting the Requirements is the first Phase in the SSLC process.
Feasibility Study — after completing the requirement process they move to the design phase.
Design — in this phase, they start designing the software.
Coding — when designing is completed, the developers start coding for the software.
Testing — in this phase when the coding of the software is done the testing team will start testing.
Installation — after completion of testing, the application opens to the live server and launches!
Maintenance — after completing the software development, customers start using the software.
Essentials of Automations: The Art of Triggers and Actions in FMESafe Software
In this second installment of our Essentials of Automations webinar series, we’ll explore the landscape of triggers and actions, guiding you through the nuances of authoring and adapting workspaces for seamless automations. Gain an understanding of the full spectrum of triggers and actions available in FME, empowering you to enhance your workspaces for efficient automation.
We’ll kick things off by showcasing the most commonly used event-based triggers, introducing you to various automation workflows like manual triggers, schedules, directory watchers, and more. Plus, see how these elements play out in real scenarios.
Whether you’re tweaking your current setup or building from the ground up, this session will arm you with the tools and insights needed to transform your FME usage into a powerhouse of productivity. Join us to discover effective strategies that simplify complex processes, enhancing your productivity and transforming your data management practices with FME. Let’s turn complexity into clarity and make your workspaces work wonders!
Zoom is a comprehensive platform designed to connect individuals and teams efficiently. With its user-friendly interface and powerful features, Zoom has become a go-to solution for virtual communication and collaboration. It offers a range of tools, including virtual meetings, team chat, VoIP phone systems, online whiteboards, and AI companions, to streamline workflows and enhance productivity.
4. Spoiler
• DDD is not for the perfectionist
• DDD is based on incremental changes (backed by TDD)
5. Spoiler
• DDD is not for the perfectionist
• DDD is based on incremental changes (backed by TDD)
• Those changes must be guided by business requirements
16. Ubiquitous Language
• A set of business words
• Usually nouns and verbs
Agent
Property
Agency
Sell Buy
Ad Contact
17. Bounded Context
• A set of business words that are part of the Ubiquitous Language
for a specific business area
Agent
Property
Agency
Sell Buy
Ad Contact
18. Context Mapping
• A set of business words that are part of the Ubiquitous Language
whose purpose is to share knowledge between Bounded Contexts
Agent
Property
Agency
Sell Buy
Ad Contact
19. Context Mapping
• A set of business words that are part of the Ubiquitous Language
whose purpose is to share knowledge between Bounded Contexts
Agent
Property
Agency
Sell Buy
Ad Contact
Publish
20. Context Mapping
• A set of business words that are part of the Ubiquitous Language
whose purpose is to share knowledge between Bounded Contexts
Ad Opportunity
Contact Property
Search Demand
21. Exercise 1
• Define the Ubiquitous Language of Real Estate
• Define the Bounded Context of Management
• Define the Bounded Context of Classifieds
• Define Context Mappings between Management and Classifieds
22. Tactical DDD
• Based on Model Driven Design
• Design Data & Behavior as Models
• Based on Clean Architecture Concepts
• SOLID (again)
23. Back to the SOLID
• Single Responsibility
• Responsibility is not based on code, but
on abstractions
• A good abstraction is more valuable
than good code
• But a good abstraction leads to better
code!
• Component responsibility evolves
during the project lifecycle
Domain
Layer
24. Back to the SOLID
• Open Closed
• Open for lower level abstractions, closed
to different implementations
• Abstractions backed by other ones
Contact Contact
DAO
Contact Service
Business Logic
Persistence
Business Transaction
25. Back to the SOLID
• Liskov Substitution
• Ability to change different
implementations that expose the same
abstraction
• Constrained by invariants, pre-
conditions and post-conditions
Client Agent Agency
Contactable
Contact
26. Back to the SOLID
• Interface Segregation
• Expose different abstractions with the
same implementation
• Different abstractions != God object
Agent
Contactable Publisher
27. Back to the SOLID
• Dependency Inversion
• Abstractions are backed by other higher-
level abstractions
• An abstraction must not depend directly
or indirectly on itself
Controller
Application Service
Domain Services
Domains
LevelofAbstraction
28. Model Driven Design
• Responsibility is distributed in models
• Models are an accurate representation of a business concept for a
concrete problem
• Models are stateful and logic-aware
• Models are not necessarily objects (but usually defined with them)
32. Model Driven Design
• Everything should be a model (no defined granularity)
• Model interaction backed by services
• Persistence outside models (DAO)
33. Exercise 2
• Model the following user stories:
• As an Agent, I want to create a Property
• As an Agent, I want to publish a Property as an Ad
• As a Client, I want to contact an Agent through an Ad
• As an Agent, I want to unpublish an Ad
• You can use Java, C# or JavaScript for this exercise
34. Model Driven Design
• Properties of a Model:
• A model has invariants
• A model has multiple contracts
• A model is able to interact with other models
• A model is composed by other models
35. Invariants
• An invariant is a set of constraints based on the system state
• You can’t create a user without an email
• You can’t create two properties with the same ID
• Invariant violations must fail-fast
• A model must not exist in the system if its invariants are not full-filled
37. Contracts
• A contract is the definition of the abstraction that the model solves
• User is a contract
• Agent is a contract
• Both can be implemented by any model
38. Model Interaction
• A model needs to interact with the environment, so the system can
work
• A single model is completely useless
39. Model Composition
• Models are composed by other models
• Primitives are not models, but state
• int, String or long are not business objects
• Avoid Primitive Obsession
• A Garbage Collector isn´t a performance problem
42. Domain Driven Design - Domain Layer
• AKA Business Layer
• Split in two components
• Aggregate Roots
• Domain Services
• Depends on Infrastructure
Domain
Service
Aggregate
Root
Infrastructure
Service
43. Domain Driven Design – Aggregate Root
• An Aggregate Root is the central part of data and business integrity
• Handles interaction with other domain objects
• Handles invariants related with other domain objects
• Aggregate Roots are Entities
44. Domain Driven Design – Entity
• An Entity is a business object that can be referred unequivocally by
a unique identifier.
• Entities are property of a Bounded Context
• An entity can’t be found in more than one Bounded Context
• Entities are a composition of Value Objects and business logic
46. Domain Driven Design – Value Object
• A Value Object is a representation of a business value with its own
invariants and business logic
• Value Objects do not have identity
• Value Objects can be composed
• Value Objects must be immutable and shareable
• Value Objects also represent Entities in other Bounded Contexts
48. Domain Driven Design – Domain Services
• Handle business transactions
• Backed by aggregate roots and infrastructure services
• Must be ACID
• Atomic
• Consistent
• Isolated
• Durable
49. Domain Driven Design – Domain Services
• As A Visitor, I want to login
• Must Exist
• Must not be banned
• Must have been
verified
Find Visitor By
Email
• Password must
match
• Update Login Date
Login
• Persists New User
Info
• Notifies other
system players
about the event
Save User
50. Domain Driven Design – Domain Services
• As A Visitor, I want to login
Domain
Service
Aggregate
Root
Infrastructure
Service
52. Domain Driven Design – Infrastructure Services
• Handle data persistence
• Handle data integrity
• Handle system-wide invariants
• Unique Keys
• Sub-domain Invariants
• Communicate with 3rd party systems (like Event Buses, APIs or DBs)
53. Domain Driven Design – Infrastructure Services
• They can be categorized in:
• Domain Wide Infrastructure Services
• Repositories (!= DAOs)
• Event Publishers
• Command Publishers
• System Wide Infrastructure Services
• Marshallers
• Controllers
• Views
54. Domain Driven Design – Infrastructure Services
• Domain Wide Infrastructure Services are very special
• Their contract are part of the domain, not part of the infrastructure
• Repository interfaces are on the ´domain´ package
• They understand part of the domain language but they are not part of the
domain
• They must validate some invariants
• The relationship is simple: the same the developers have with their Product Owners
55. Domain Driven Design – Application Services
• Handle domain-wide transactions
• Understand domain language
• Application transactions are
eventually consistent
ApplicationService
Domain Service
Domain Service
Domain Service
61. TDD for Domain Driven Design
Green
(Work)
Refactor
(Refine)
Red
(Design)
Optional
62. TDD for Domain Driven Design
• Red
• Design the simplest concept required for a functional prototype
• Less classes are best! Think always about abstractions
• Green
• Just make it work
• Refactor
• Do not refactor for better code
• Do not design if you don´t have enough business knowledge
• Design top-down if you are not sure about the functionality
63. TDD for Domain Driven Design
Red Green
Acquire
Business
Knowledge
Refactor
64. TDD – Refactor
• Refactor is not a tool for better code!
• Refactor is a tool for better abstractions!
• Do not refactor until you have better knowledge of the problem.
65. TDD – Refactor Direction
Application
Service
Domain
Service
Aggregate
Root
Abstraction Level
66. TDD – Refactor
• Do not forget component responsibility
• When refactoring, Domain Services must be always responsible of one
domain and ACID
• Do not break abstractions never
• If you need to break something, always break encapsulation instead of
abstractions
• Commits are a unit of time, software evolves, don’t try to create
perfect code