An introduction to Domain Driven Design, including definitions of domain experts, ubiquitous language, domains and subdomains, models, bounded contexts and context maps
Second presentation on domain-driven design. In this presentation tactical designs are presented, describing what value objects, entities, aggregates, domain events and domain services are (and how they can be implemented)
In this fourth presentation on domain-driven design, we present the architectural patterns that are most commonly used (layered architecture, hexagonal architecture and CQRS), describing their characteristics and suggesting when and how to use them
This document discusses domain-driven design repositories. It explains that a repository manages aggregate persistence and retrieval while separating the domain and data models. The repository defines a boundary and restricts access to aggregates. It also hides the underlying persistence technology. The interface is defined within the domain model namespace. The implementation is in infrastructure and backed by a persistence technology. The document stresses separating domain and data models so they can change independently, with the repository acting as the integration point. It also discusses using snapshots to persist aggregates and mapping snapshots to the data model.
This third slide deck on domain drive design is dedicated to event sourcing. This is meant to be an introduction to the topic, which does not dive into implementation details, but is meant to give an idea about how event sourcing works and how one can use it to introduce the time dimension into the modeling
Explain Domain-Driven Design, its main concepts and tools, and the Event Storming practice to highlight the importance of a good design and empower a team to start using it progressively.
Domain-driven design (DDD) is an approach to software development that focuses on modeling a domain and implementing software that matches the complexity of that domain. It aims to tackle complexity in enterprise software by focusing design efforts on the core domain. Some key principles of DDD include building a ubiquitous language within a bounded context, using entities and value objects to model the domain, separating domain logic from application and presentation logic, and ensuring persistence ignorance. DDD can help improve understanding of the problem domain, create a shared language between technical and domain experts, and lead to a model-driven design rather than one driven by tools or databases.
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.
The document discusses Domain Driven Design (DDD), a software development approach that focuses on building an object-oriented model of the domain that software needs to represent. It emphasizes modeling the domain closely after the structure and language of the problem domain. Key aspects of DDD discussed include ubiquitous language, bounded contexts, entities, value objects, aggregate roots, repositories, specifications, domain services, modules, domain events, and command query separation. DDD is best suited for projects with a significant domain complexity where closely modeling the problem domain can help manage that complexity.
Second presentation on domain-driven design. In this presentation tactical designs are presented, describing what value objects, entities, aggregates, domain events and domain services are (and how they can be implemented)
In this fourth presentation on domain-driven design, we present the architectural patterns that are most commonly used (layered architecture, hexagonal architecture and CQRS), describing their characteristics and suggesting when and how to use them
This document discusses domain-driven design repositories. It explains that a repository manages aggregate persistence and retrieval while separating the domain and data models. The repository defines a boundary and restricts access to aggregates. It also hides the underlying persistence technology. The interface is defined within the domain model namespace. The implementation is in infrastructure and backed by a persistence technology. The document stresses separating domain and data models so they can change independently, with the repository acting as the integration point. It also discusses using snapshots to persist aggregates and mapping snapshots to the data model.
This third slide deck on domain drive design is dedicated to event sourcing. This is meant to be an introduction to the topic, which does not dive into implementation details, but is meant to give an idea about how event sourcing works and how one can use it to introduce the time dimension into the modeling
Explain Domain-Driven Design, its main concepts and tools, and the Event Storming practice to highlight the importance of a good design and empower a team to start using it progressively.
Domain-driven design (DDD) is an approach to software development that focuses on modeling a domain and implementing software that matches the complexity of that domain. It aims to tackle complexity in enterprise software by focusing design efforts on the core domain. Some key principles of DDD include building a ubiquitous language within a bounded context, using entities and value objects to model the domain, separating domain logic from application and presentation logic, and ensuring persistence ignorance. DDD can help improve understanding of the problem domain, create a shared language between technical and domain experts, and lead to a model-driven design rather than one driven by tools or databases.
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.
The document discusses Domain Driven Design (DDD), a software development approach that focuses on building an object-oriented model of the domain that software needs to represent. It emphasizes modeling the domain closely after the structure and language of the problem domain. Key aspects of DDD discussed include ubiquitous language, bounded contexts, entities, value objects, aggregate roots, repositories, specifications, domain services, modules, domain events, and command query separation. DDD is best suited for projects with a significant domain complexity where closely modeling the problem domain can help manage that complexity.
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
Domain driven design and model driven developmentDmitry Geyzersky
This document discusses domain driven design and model driven development. It introduces ontology and how it relates to domain driven design. The document outlines key domain driven design building blocks like the domain model, entities, value objects, repositories, services, and aggregates. It also discusses challenges of domain driven design and code generation techniques.
The document discusses refactoring code towards a domain-driven design approach. It notes that over time, as more features are added and teams grow, code becomes more complex without design. Domain-driven design is presented as a way to refactor code through techniques like defining a ubiquitous language, identifying domain models, isolating domains with bounded contexts, and expressing state changes with events. Refactoring requires prioritization and "boyscout refactoring" of cleaning up small pieces of code litter. The document advocates for seeing the benefits of refactoring without having to fully adopt every aspect of domain-driven design or drink the "kool-aid." Consistency is important when refactoring.
This document provides an overview of domain-driven design (DDD). Some key points:
- DDD is an approach to software development that focuses on modeling the core domain and problem domain. It aims to create software that is tailored to the needs of its domain.
- When using DDD, developers work closely with domain experts to develop a domain model through knowledge crunching techniques. This domain model serves as a shared language between technical and business teams.
- The domain model is separated from technical concerns. Multiple bounded contexts may be defined to decompose large domains. Code is developed to closely align with the domain model.
- Patterns like entities, aggregates, and repositories are used tactically but D
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) is an approach to software development that prioritizes the core domain and domain logic. It advocates building a shared understanding of the domain through a ubiquitous language and modeling the domain concepts and entities. The document outlines the key concepts and building blocks of DDD such as bounded contexts, entities, value objects, aggregates, repositories, and factories.
Domain Driven Design (DDD) is a software development approach that focuses on modeling a complex domain into code. The document discusses key DDD concepts like entities, value objects, aggregates, repositories, bounded contexts, and validation. It provides examples of how these concepts are implemented in code and outlines challenges and situations where DDD may not be appropriate, such as for non-complex domains without behavior/logic or where the data model maps directly to a relational database schema.
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.
- 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
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.
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.
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.
DDD Strategic Patterns and Microservices by ExampleErik Ashepa
As Microservices have grown in popularity in recent years and quickly became the preferred method for many developers, more and more teams are facing difficulties integrating and extending them with the high cadence promise they initially delivered.
That was the case a few years ago at Fiverr, the world's largest marketplace for digital services. After adopting a Microservices architecture, development was a breeze compared to the mighty monolith... but once the honeymoon period was over their progress was slowing down as they encountered issues such as:
Losing transactionality inside a service boundary
Unclear data ownership
Intertwined and non business focused services
Dependency graph for deployments
If you feel you are approaching the end of your Microservices honeymoon period, then this talk is for you!
Erik will explain what DDD's Strategic Patterns are and how adopting them helped them to better align their tech with the business, facilitate team autonomy and ownership and most importantly deliver high quality products faster!
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.
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.
Deconstructing Monoliths with Domain Driven DesignVMware Tanzu
SpringOne Platform 2017
David Turanski, Pivotal; Rohit Sood, Liberty Mutual; Rohit Kelapure, Pivotal; Justin Stone, Liberty Mutual
This session will detail a synthesis of techniques used to destroy a monolithic BPM and orchestration based application at Liberty Mutual into an event driven microservices based architecture implemented with Event Sourcing and CQRS. The transformation and developer productivity affected by the monolith decomposition and alignment of business capabilities to bounded contexts teaches lessons for all enterprises looking to undergo similar changes.
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.
Domain Driven Design is an approach to software development that focuses on modeling the core domain and business logic of an application. The document discusses key concepts in Domain Driven Design including: bounded contexts, ubiquitous language, strategic design and tactical design. Strategic design uses tools like bounded contexts and ubiquitous language to structure a complex domain, while tactical design includes model-driven design patterns like entities, value objects, and aggregates.
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
Domain driven design and model driven developmentDmitry Geyzersky
This document discusses domain driven design and model driven development. It introduces ontology and how it relates to domain driven design. The document outlines key domain driven design building blocks like the domain model, entities, value objects, repositories, services, and aggregates. It also discusses challenges of domain driven design and code generation techniques.
The document discusses refactoring code towards a domain-driven design approach. It notes that over time, as more features are added and teams grow, code becomes more complex without design. Domain-driven design is presented as a way to refactor code through techniques like defining a ubiquitous language, identifying domain models, isolating domains with bounded contexts, and expressing state changes with events. Refactoring requires prioritization and "boyscout refactoring" of cleaning up small pieces of code litter. The document advocates for seeing the benefits of refactoring without having to fully adopt every aspect of domain-driven design or drink the "kool-aid." Consistency is important when refactoring.
This document provides an overview of domain-driven design (DDD). Some key points:
- DDD is an approach to software development that focuses on modeling the core domain and problem domain. It aims to create software that is tailored to the needs of its domain.
- When using DDD, developers work closely with domain experts to develop a domain model through knowledge crunching techniques. This domain model serves as a shared language between technical and business teams.
- The domain model is separated from technical concerns. Multiple bounded contexts may be defined to decompose large domains. Code is developed to closely align with the domain model.
- Patterns like entities, aggregates, and repositories are used tactically but D
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) is an approach to software development that prioritizes the core domain and domain logic. It advocates building a shared understanding of the domain through a ubiquitous language and modeling the domain concepts and entities. The document outlines the key concepts and building blocks of DDD such as bounded contexts, entities, value objects, aggregates, repositories, and factories.
Domain Driven Design (DDD) is a software development approach that focuses on modeling a complex domain into code. The document discusses key DDD concepts like entities, value objects, aggregates, repositories, bounded contexts, and validation. It provides examples of how these concepts are implemented in code and outlines challenges and situations where DDD may not be appropriate, such as for non-complex domains without behavior/logic or where the data model maps directly to a relational database schema.
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.
- 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
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.
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.
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.
DDD Strategic Patterns and Microservices by ExampleErik Ashepa
As Microservices have grown in popularity in recent years and quickly became the preferred method for many developers, more and more teams are facing difficulties integrating and extending them with the high cadence promise they initially delivered.
That was the case a few years ago at Fiverr, the world's largest marketplace for digital services. After adopting a Microservices architecture, development was a breeze compared to the mighty monolith... but once the honeymoon period was over their progress was slowing down as they encountered issues such as:
Losing transactionality inside a service boundary
Unclear data ownership
Intertwined and non business focused services
Dependency graph for deployments
If you feel you are approaching the end of your Microservices honeymoon period, then this talk is for you!
Erik will explain what DDD's Strategic Patterns are and how adopting them helped them to better align their tech with the business, facilitate team autonomy and ownership and most importantly deliver high quality products faster!
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.
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.
Deconstructing Monoliths with Domain Driven DesignVMware Tanzu
SpringOne Platform 2017
David Turanski, Pivotal; Rohit Sood, Liberty Mutual; Rohit Kelapure, Pivotal; Justin Stone, Liberty Mutual
This session will detail a synthesis of techniques used to destroy a monolithic BPM and orchestration based application at Liberty Mutual into an event driven microservices based architecture implemented with Event Sourcing and CQRS. The transformation and developer productivity affected by the monolith decomposition and alignment of business capabilities to bounded contexts teaches lessons for all enterprises looking to undergo similar changes.
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.
Domain Driven Design is an approach to software development that focuses on modeling the core domain and business logic of an application. The document discusses key concepts in Domain Driven Design including: bounded contexts, ubiquitous language, strategic design and tactical design. Strategic design uses tools like bounded contexts and ubiquitous language to structure a complex domain, while tactical design includes model-driven design patterns like entities, value objects, and aggregates.
Presentation given at "Software for Domain Experts", Athens, Nov 2016. It is about Software for Domain Experts, Domain Driven Design and Systemic Approach. Its purpose is to show how we can follow the Domain Driven Design approach along with the Systemic Approach in order to produce high quality Software for Domain Experts.
Domain Drive Design: A Very Short Introduction for Business PeopleEmre Sevinç
Domain Drive Design: A Very Short Introduction for Business People, prepared by Emre Sevinç, Co-founder & CTO of TM Data ICT Solutions.
This is a high level overview that might help guide the discussions to explore if Domain Driven Design (DDD) is good fit for different industries and their complex software and data projects.
DDD is a software development approach that focuses on bringing together business and technical concerns. It emphasizes close collaboration between domain experts and developers to build a domain model. The domain model is an abstract representation of the software's purpose area using a ubiquitous language. This language is derived from the domain experts and unifies their terms with those used by developers. The domain model, code, and ubiquitous language should evolve together through refactoring to ensure the software effectively solves business problems. DDD works well with iterative and agile approaches.
The document discusses using Domain Driven Design and the Systemic Approach to develop Software for Domain Experts. It proposes that Domain Driven Design, based on simple Systemic principles, can help develop high-value software by focusing on the core domain, collaborating with domain experts to build models of the domain, and establishing a common language within explicit boundaries. The Systemic Approach aids this process by helping to understand and model the domain, its context and dynamics, and uncover patterns of behavior to discover the domain's structure. Together, these approaches aim to develop empathetic software that meets business needs in an agile and differentiated way.
This workshop focuses on domain driven design and how to achieve it effectively. It also focus on bridging gaps while gathering requirements from business stakeholders using event storming workshops.
Domain-Driven Design (DDD) is an approach that focuses on modeling a complex domain and problem solving. It emphasizes modeling the domain and domain logic over technical details. When building large, mission critical systems, tactics and strategy in DDD address both tactical and strategic design challenges. To get started, one looks at the business processes, breaks the domain into sub-domains, focuses on a sub-domain with domain experts to develop a shared language, and identifies domain events based on commands and queries.
SE2_Lec 19_Design Principles and Design PatternsAmr E. Mohamed
The document discusses software design patterns and principles. It defines what design patterns are, their benefits, and some commonly used patterns like Singleton, Observer, and Strategy. It also covers software design principles like the Single Responsibility Principle, Open-Closed Principle, Liskov Substitution Principle, and others. The document provides examples to illustrate how patterns and principles can be applied to improve software design.
Following on from the success of last year, this annual event for London's architect community will have architectural innovation as a theme this year, and particularly CQRS. At the DDD eXchange we will feature leading thinkers and architects who will share their experience and Eric Evans is the programme lead.
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.
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.
Based on my observations, in IT we suffer from continuous collective amnesia and we are even proud of it.
For at least 50 years meanwhile, we struggle how to build systems, that are easy to understand, to maintain, to change and to operate in a reliable way. Each time we hit the wall again, we start to look for a new silver bullet on the horizon, strongly believing that it will solve the problem for good.
The key word is "new": "New" is good in our community, while "old" is bad, worthless, crap. We suffer from youthism, not only in recruiting, but in all areas. This way we discard any "old" knowledge, no matter if it is valuable or not. We separate by age, not by value.
Additionally we continuously lose our collective memory with every new generation that leaves university as they are also taught not to value anything old and instead only look for the new, shiny stuff.
While not all old knowledge is worth being preserved, admittedly, there is still a lot of valuable old knowledge available, offering answers to the problems that we face today - creating maintainable and reliable systems, dealing with distribution and tackling complexity, just to name a few of the challenges.
This presentation is a journey through some (very) old computer science papers that contain a lot of very valuable knowledge regarding the problems we face today. For each of the papers, some of the key ideas are presented and how they address our current challenges.
Of course, the voice track is missing and there are a lot more papers that would be worth being mentioned in this presentation. Still, I hope that also the slides alone will be of some value for you - and convince you a bit that not everything "old" in IT is automatically worthless ... ;)
Agile practitioners can be design avoidant! DDD helps improve communication through ubiquitous language; improve thinking through mapping patterns; and ensuring design and reality match.
Sioux Hot-or-Not: Model Driven Software Development (Markus Voelter)siouxhotornot
The document contains information about Markus Völter and his work related to model-driven software development. It discusses that Markus Völter works as an independent consultant focused on software architecture, middleware, and model-driven software development. He has written books on these topics, speaks at conferences, and is a committer for the Eclipse openArchitectureWare project. The document also provides an overview of model-driven development, including how it works, reasons for using it, core concepts, and benefits.
Following on from the success of last year, this annual event for London's architect community will have architectural innovation as a theme this year, and particularly CQRS. At the DDD eXchange we will feature leading thinkers and architects who will share their experience and Eric Evans is the programme lead.
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.
Business analysis interview question and answersGaruda Trainings
Business Analysis is the process of understanding business change needs, assessing the impact of those changes, capturing, analyzing and documenting requirements and then supporting the communication and delivery of those requirements with relevant parties.The person who carries out this task is called a business analyst or BA.
Similar to DDD - 1 - A gentle introduction to Domain Driven Design.pdf (20)
The document introduces artificial intelligence and defines it as machines exhibiting human-like intelligence through tasks like reasoning, planning, learning from data, natural language processing, and perception. It then discusses supervised machine learning, where humans provide training data to teach algorithms to classify new examples, and some challenges of this approach including the need for large, representative training datasets customized to each user.
Sorting algorithms in C++
An introduction to sorting algorithm, with details on bubble sort and merge sort algorithms
Computer science principles course
This document discusses doubly linked lists. It explains that a doubly linked list allows traversal from left to right and right to left by storing pointers to both the next and previous elements. While requiring more memory than singly linked lists, doubly linked lists allow easier access to elements since elements can be reached from either the head or tail of the list. The document also covers creating and printing doubly linked lists by defining nodes with previous, data, and next pointers and traversing the list in both directions.
The document discusses linked lists and their advantages over arrays. It begins with an overview of arrays and their pros and cons, then introduces linked lists as an alternative that overcomes some of the limitations of arrays. Key points covered include:
- Linked lists store elements in separate blocks of memory connected via pointers, unlike arrays which use a single block.
- This allows linked lists to dynamically allocate memory as needed, rather than having a fixed size like arrays.
- Common linked list operations like inserting and deleting nodes are described, including handling different cases like empty lists.
- Functions for traversing the list, printing elements, copying lists, and deleting nodes are presented.
This document provides an introduction and overview of AJAX (Asynchronous JavaScript and XML). It discusses the advantages of JavaScript, including how AJAX allows for reactive web interfaces similar to desktop applications by avoiding full page refreshes. The key principles of AJAX are outlined, including using JavaScript for user interactions, processing data in the browser, and reducing client-server communication. AJAX is described as a technique used to build Rich Internet Applications (RIAs) that have features similar to desktop apps but are executed within a browser. The document also provides details on using the XMLHttpRequest object to make asynchronous requests to a server and handle the server response.
The document discusses Java Server Pages (JSP) and how they address some limitations of Java servlets. JSPs allow embedding Java code within HTML pages using scripting elements, separating presentation from logic compared to servlets which embed HTML within Java code. This makes JSP pages more readable and easier to develop and maintain. JSPs are translated into servlets by the web container before being executed, so they benefit from servlets' abilities while providing a simpler programming model for developers. The document provides various examples of using JSPs to handle dynamic content, database access, and modularization through inclusion of common elements across pages.
This document provides an overview of using Java Database Connectivity (JDBC) to connect to and interact with relational databases from Java servlets. It describes relational databases and how they organize data into tables. It explains the basic JDBC connection flow of getting a connection, executing SQL statements, and reading results. It also covers key JDBC interfaces like Connection, Statement, and ResultSet. The document provides an example servlet for looking up phone numbers from a database and discusses best practices like reusing connections and using connection pooling.
The document discusses client-side scripting and scripts. It notes that scripts automate tasks that could otherwise be done manually. Scripts can be used in software applications, web pages, operating system shells, and more. Scripting languages make writing scripts easy and support interfaces to operating system facilities. Examples of scripting languages include JavaScript, Python, and Perl. The document then contrasts interpreters with compilers and compares how scripts and software code are developed and executed.
HTML5 provides new semantic elements that allow for more precise structuring and presentation of web content. Key elements include <header> for introductory content, <nav> for navigation links, <article> for self-contained compositions, <section> for document sections, <aside> for tangential content, and <footer> for closing content. HTML5 also introduces new elements like <time> for dates and times, <address> for contact information, <figure> for images and captions, and <details> for expandable content sections.
- Dynamic content generation is needed to satisfy user needs that cannot be met with static content alone, such as data from databases or responses to queries. This requires server-side architectures that dynamically generate content.
- HTTP is a stateless protocol in which each client request is associated with a method like GET or POST specifying the desired action. GET retrieves information while POST submits information of unlimited length in the request body.
- A Java servlet is a pluggable program that extends server functionality. Servlets run inside a servlet container on the server and are portable across systems.
Multimedia Information Retrieval and User BehaviorEleonora Ciceri
This document summarizes research on multimedia information retrieval and user behavior analysis in social media. It discusses large-scale image and photo uploads by sites like Flickr and Facebook. It also covers image search techniques using local and global descriptors as well as the bag-of-visual-words model. The document then analyzes motivations for and automatic processing of video blogs, including extracting visual and audio cues from videos to characterize behaviors like dominance and emotional state.
The document describes a framework called CUbRIK that uses human computation to improve multimedia search. It presents a case study on using the crowd to detect trademark logos in videos. Workers validate automatically detected logos and add new logos. The system matches tasks to workers based on their skills. An evaluation compares the logo detection accuracy of automatic methods, experts, and the crowd. While the crowd recall is higher, its precision is lower due to the workers' varied locations and expertise.
Introduction- e - waste – definition - sources of e-waste– hazardous substances in e-waste - effects of e-waste on environment and human health- need for e-waste management– e-waste handling rules - waste minimization techniques for managing e-waste – recycling of e-waste - disposal treatment methods of e- waste – mechanism of extraction of precious metal from leaching solution-global Scenario of E-waste – E-waste in India- case studies.
Applications of artificial Intelligence in Mechanical Engineering.pdfAtif Razi
Historically, mechanical engineering has relied heavily on human expertise and empirical methods to solve complex problems. With the introduction of computer-aided design (CAD) and finite element analysis (FEA), the field took its first steps towards digitization. These tools allowed engineers to simulate and analyze mechanical systems with greater accuracy and efficiency. However, the sheer volume of data generated by modern engineering systems and the increasing complexity of these systems have necessitated more advanced analytical tools, paving the way for AI.
AI offers the capability to process vast amounts of data, identify patterns, and make predictions with a level of speed and accuracy unattainable by traditional methods. This has profound implications for mechanical engineering, enabling more efficient design processes, predictive maintenance strategies, and optimized manufacturing operations. AI-driven tools can learn from historical data, adapt to new information, and continuously improve their performance, making them invaluable in tackling the multifaceted challenges of modern mechanical engineering.
Advanced control scheme of doubly fed induction generator for wind turbine us...IJECEIAES
This paper describes a speed control device for generating electrical energy on an electricity network based on the doubly fed induction generator (DFIG) used for wind power conversion systems. At first, a double-fed induction generator model was constructed. A control law is formulated to govern the flow of energy between the stator of a DFIG and the energy network using three types of controllers: proportional integral (PI), sliding mode controller (SMC) and second order sliding mode controller (SOSMC). Their different results in terms of power reference tracking, reaction to unexpected speed fluctuations, sensitivity to perturbations, and resilience against machine parameter alterations are compared. MATLAB/Simulink was used to conduct the simulations for the preceding study. Multiple simulations have shown very satisfying results, and the investigations demonstrate the efficacy and power-enhancing capabilities of the suggested control system.
Software Engineering and Project Management - Introduction, Modeling Concepts...Prakhyath Rai
Introduction, Modeling Concepts and Class Modeling: What is Object orientation? What is OO development? OO Themes; Evidence for usefulness of OO development; OO modeling history. Modeling
as Design technique: Modeling, abstraction, The Three models. Class Modeling: Object and Class Concept, Link and associations concepts, Generalization and Inheritance, A sample class model, Navigation of class models, and UML diagrams
Building the Analysis Models: Requirement Analysis, Analysis Model Approaches, Data modeling Concepts, Object Oriented Analysis, Scenario-Based Modeling, Flow-Oriented Modeling, class Based Modeling, Creating a Behavioral Model.
artificial intelligence and data science contents.pptxGauravCar
What is artificial intelligence? Artificial intelligence is the ability of a computer or computer-controlled robot to perform tasks that are commonly associated with the intellectual processes characteristic of humans, such as the ability to reason.
› ...
Artificial intelligence (AI) | Definitio
Design and optimization of ion propulsion dronebjmsejournal
Electric propulsion technology is widely used in many kinds of vehicles in recent years, and aircrafts are no exception. Technically, UAVs are electrically propelled but tend to produce a significant amount of noise and vibrations. Ion propulsion technology for drones is a potential solution to this problem. Ion propulsion technology is proven to be feasible in the earth’s atmosphere. The study presented in this article shows the design of EHD thrusters and power supply for ion propulsion drones along with performance optimization of high-voltage power supply for endurance in earth’s atmosphere.
Optimizing Gradle Builds - Gradle DPE Tour Berlin 2024Sinan KOZAK
Sinan from the Delivery Hero mobile infrastructure engineering team shares a deep dive into performance acceleration with Gradle build cache optimizations. Sinan shares their journey into solving complex build-cache problems that affect Gradle builds. By understanding the challenges and solutions found in our journey, we aim to demonstrate the possibilities for faster builds. The case study reveals how overlapping outputs and cache misconfigurations led to significant increases in build times, especially as the project scaled up with numerous modules using Paparazzi tests. The journey from diagnosing to defeating cache issues offers invaluable lessons on maintaining cache integrity without sacrificing functionality.
Redefining brain tumor segmentation: a cutting-edge convolutional neural netw...IJECEIAES
Medical image analysis has witnessed significant advancements with deep learning techniques. In the domain of brain tumor segmentation, the ability to
precisely delineate tumor boundaries from magnetic resonance imaging (MRI)
scans holds profound implications for diagnosis. This study presents an ensemble convolutional neural network (CNN) with transfer learning, integrating
the state-of-the-art Deeplabv3+ architecture with the ResNet18 backbone. The
model is rigorously trained and evaluated, exhibiting remarkable performance
metrics, including an impressive global accuracy of 99.286%, a high-class accuracy of 82.191%, a mean intersection over union (IoU) of 79.900%, a weighted
IoU of 98.620%, and a Boundary F1 (BF) score of 83.303%. Notably, a detailed comparative analysis with existing methods showcases the superiority of
our proposed model. These findings underscore the model’s competence in precise brain tumor localization, underscoring its potential to revolutionize medical
image analysis and enhance healthcare outcomes. This research paves the way
for future exploration and optimization of advanced CNN models in medical
imaging, emphasizing addressing false positives and resource efficiency.
Batteries -Introduction – Types of Batteries – discharging and charging of battery - characteristics of battery –battery rating- various tests on battery- – Primary battery: silver button cell- Secondary battery :Ni-Cd battery-modern battery: lithium ion battery-maintenance of batteries-choices of batteries for electric vehicle applications.
Fuel Cells: Introduction- importance and classification of fuel cells - description, principle, components, applications of fuel cells: H2-O2 fuel cell, alkaline fuel cell, molten carbonate fuel cell and direct methanol fuel cells.
Discover the latest insights on Data Driven Maintenance with our comprehensive webinar presentation. Learn about traditional maintenance challenges, the right approach to utilizing data, and the benefits of adopting a Data Driven Maintenance strategy. Explore real-world examples, industry best practices, and innovative solutions like FMECA and the D3M model. This presentation, led by expert Jules Oudmans, is essential for asset owners looking to optimize their maintenance processes and leverage digital technologies for improved efficiency and performance. Download now to stay ahead in the evolving maintenance landscape.
2. The rationale: why domain-driven? (1)
Communication issues in projects are often the cause for project failures
These issues can manifest themselves in different ways:
- unclear requirements
- uncertain project goals
- ineffective coordination
- ineffective effort
2
3. The rationale: why domain-driven? (2)
Domain-driven design (in short, DDD) focuses on effective communication:
What do we gain? Guide decisions according to the business strategy
3
DDD strategic tools
Analyze business domain and strategy to foster a
shared understanding of the business between
stakeholders
DDD tactical tools
Write code in a way that reflects the business
domain, addresses its goals and speaks the
language of the business
5. What is a business domain?
A business domain defines a company’s main area of activity
5
“sells coffee” “provides
courier delivery”
6. What is a subdomain?
A subdomain is a fine-grained area of business activity
The subdomain have to interact with each other to achieve the company’s
goal in its business domain
6
business domain
(some) subdomains
buy real
estate
hire
personnel
manage
finances
sell coffee
divides into
7. Core subdomain
A core subdomain is what a company does differently from its competitors
- inventing new products or services
- reducing costs by optimizing existing processes
7
Uber
Ridesharing
Jewelry maker
Jewelry design
Google
Ranking algorithm
8. Generic subdomain
A generic subdomain is a business activity that all companies perform in the
same way
- do not provide competitive advantage
- no need for innovation or optimization (use what is available!)
8
Jewelry maker
Online shop
Uber
Authc/z
9. Supporting domain
A supporting domain supports the company’s business without providing
competitive advantage
9
Online advertising company
Storing and indexing creative
materials (banners, landing
pages…)
11. Solution strategy
All subdomains are required for the business domain to work!
11
Core subdomain Generic subdomain
Supporting
subdomain
has to be implemented in-house
(if adopted from someone else, it would undermine
the notion of competitive advantage, as the
company’s competitors would be able to do the same
thing we do)
cost-effective to buy as off-the-shelf
product or adopt an open-source
solution
(hard but already solved problems)
a rapid application development
framework will suffice to implement the
business logic without introducing
complexity
(do not require elaborate design patterns)
12. How do we identify subdomains?
Start from the company’s departments and other organizational units. Then,
investigate inner workings and see if a department is composed of
finer-grained components
12
14. Who are the domain experts?
Domain experts are subject matter experts who know the business that we
are going to model and implement in code
The software is supposed to solve their problems
14
What they are
- knowledge authorities in the business
domain
- people coming up with requirements
- end users
What they are NOT
- analysts gathering requirements
- engineers designing the system
16. Business problems
The software systems we build are solutions to business problems, both at
business domain and subdomain
16
business domain/subdomains
courier delivery
knowledge management
clearing subdomain
accounting subdomain
business problems
ship packages in limited time frame
optimize information storage/retrieval
optimize the execution of financial transactions
optimize the shipping process
17. Traditional SW development lifecycle: flaws
17
interviews conducted by analysts, without
engineers, sometimes without domain experts
written documents that
become outdated
wrong or distorted
understanding of problem and
requirements
wrong solution, or right solution
to the wrong problem
A chain of translations
distills the wrong
domain knowledge and
leads to the wrong
software
18. Knowledge discovery
To design a software solution, we have to grasp and distill the basic
knowledge of the business domain
18
the knowledge belongs to
domain experts
it is their job to understand the intricacies
of the business domain
we are not domain experts
it is NOT our job to understand the
intricacies of the business domain
The software has to mimic the
domain experts’ way of thinking
about the problem
Without an understanding of the
business problem and the reasoning
behind the requirements, our
solution may fail to describe a
business concept
19. Knowledge discovery needs the proper language
To grasp and distill the basic knowledge of the business domain, the parties
involved need to speak the same language
- we do not have to make up the language
- we need to use the actual, existing language of the domain
19
20. Ubiquitous language
Using a ubiquitous language is the cornerstone practice of domain-driven
design
Idea: if parties need to communicate efficiently, instead of relying on
translations, they have to speak the same language
20
software
engineer
product
owner
domain
expert
UI/UX
designer
All should use the
ubiquitous language
when describing the
business domain
21. No technical jargon!
21
“the order can be published only if it has at
least one associated record in the customer
table”
“the advertisement iframe displays an HTML
file”
“we acquire real-time data using a sensor”
22. Formulate statements in the language of business
22
“an advertising campaign can display different
creative materials”
“an order can be placed only if at least one of
the contained items is available”
“sales commissions are accounted for after
transactions are approved”
23. Language consistency: ambiguous terms
Ambiguity hinders communication, so each term of the ubiquitous language
should have one and only one meaning
If a term is ambiguous, replace it with something that is not
23
policy
regulatory rule
insurance contract
24. Language consistency: synonymous terms
Two terms cannot be used interchangeably in a ubiquitous language, e.g.,
user, visitor, administrator, account…
Often these synonyms denotes different concepts, e.g.,
- “visitor” may be used only for analysis purposes in a website, as he is not
registered
- “account” actually uses the system and its functionality
24
26. What is a model?
“A model is a simplified representation of thing or phenomenon that intentionally
emphasizes certain aspects while ignoring others”
– Rebecca Wirfs-Brock
A model is NOT a copy of the real world; it is a human construct that helps us
make sense of real-world systems
26
Canonical example: a map is a model
that does not represent all the details of
our planet, but contains enough data to
support its particular purpose, i.e., the
problem it is supposed to solve
27. Effective modeling
All models have a purpose, and an effective model contains only the details
needed to fulfill its purpose
Just omit unnecessary details and leave only what is needed for solving the
problem at hand
27
there are no subway stops
on world maps
you cannot use a subway
may to estimate distances
28. Modeling the business domain
The business domain model is supposed to:
- capture the domain experts’ mental models (i.e., their thought
processes about how the business works to implement its function)
- include just enough aspects of the business domain to make it possible
to implement the required system
28
When solving the arrhythmia detection
problem we shall model ECG signals…
… not the heart vessels!
29. Modeling is a continuous effort
The ubiquitous language should be continuously reinforced throughout the
project. All the following should use this language:
- requirements
- tests
- documentation
- source code
Cultivation of a ubiquitous language is an ongoing process. Everyday use of
the language will reveal deeper insights into the business domain
29
30. Tools for managing the ubiquitous language
30
glossary
It maintains nouns (names of entities, processes, roles etc.)
It has to be maintained by all team members, not just by
architects and team leaders!
tests
Tests in Gherkin language can capture the ubiquitous
language but also to describe behavior (business logic, its
rules, assumptions, invariants)
32. Context is what gives words a meaning
Some words have different meanings depending on the context in which they
are used
32
33. Squeezing diversified knowledge into the model
Suppose we have two experts who do not agree on the ubiquitous language:
Seems like we are mixing domain concepts from different contexts. This is
why we have to introduce bounded contexts
33
Expert from marketing department
“a lead is a notification that somebody
is interested in one product”
Expert from sales department
“a lead represents the entire lifecycle of
the sales process”
34. Bounded contexts
The solution in domain-driven design is trivial:
divide the ubiquitous language into multiple (smaller) languages, then assign
each one to the explicit context in which it can be applied
The contexts in which we apply these smaller languages are called bounded
contexts
34
A ubiquitous language in
one bounded context can
be completely irrelevant
to the scope of another
bounded context
35. Bounded contexts vs Subdomains
35
Subdomain
A subdomain resembles a set of interrelated use cases
Use cases are defined by:
- business domain
- system requirements
We do NOT define the requirements, that is the
responsibility of business
Bounded context
A bounded context is designed (and choosing its
boundaries is a strategic design decision)
We decide here how to divide the business domain into
smaller, manageable problem domains
Relationship between subdomain and bounded context:
- Having a one-to-one relationship between bounded contexts and subdomains can be
reasonable in some scenarios
- In other scenarios, different decomposition strategies can be more suitable: it could be
beneficial to use multiple models of the same concept to solve different problems
36. A practical example: model for a refrigerator (1)
This is a model of a refrigerator:
No, it’s not a refrigerator, but it models the refrigerator without copying the
real-world entity. It has a purpose – a problem it is supposed to solve
36
37. A practical example: model for a refrigerator (2)
The problem it solves is checking whether the refrigerator can fit through the
kitchen door
The cardboard does not look like the fridge, but building a 3D model would
not solve the problem more efficiently than the cardboard. Thus, building a 3D
would be called overengineering
37
38. A practical example: model for a refrigerator (3)
The cardboard model, though, cannot check if the height of the refrigerator is
adequate.
We need a second model for the same fridge:
Each model has its bounded context (the cardboard verifying that the base
makes through the entry, the tape measure verifying that it is not too tall)
38
40. Contracts between bounded contexts
Bounded contexts themselves are not independent
- a system may be built of components
- components have to interact with one another to achieve the system’s
overarching goal
There are touchpoints between bounded contexts, called contracts or
integration patterns
40
41. Integration patterns: Cooperation
Cooperation patterns relate to bounded contexts implemented by teams with
well-established communication or by a single team
Partnership. Each team develops its own
bounded context, integration is done
collaboratively
Shared kernel. The same (sub-)model is
implemented in multiple bounded contexts. It
introduces dependencies between contexts: it has
to be applied only when the cost of duplicating code
is higher than the cost of coordination
41
42. Integration patterns: Customer-Supplier (1)
Customer-supplier patterns have a service provider (upstream) and a
consumer (downstream) that interact
Here teams are independent, and in most cases we have an imbalance of
power: either the upstream or the downstream team dictate the integration
contract
42
43. Integration patterns: Customer-Supplier (2)
Conformist. If the upstream does not have
motivation to support the downstream needs, it
defines the integration contract, defined according
to its own model. If the downstream accepts the
contract, it is called conformist.
Anti-corruption layer. The upstream service has still
the power of the relationship. However, the
downstream is not willing to conform. Thus, it will
translate the upstream bounded model into a model
tailored to its own needs. The anti-corruption layer
performs the translation, so that the downstream is
isolated from foreign concepts
43
44. Integration patterns: Customer-Supplier (3)
Open-Host Service. Here the upstream wants to
provide the consumer the best service possible. The
upstream decouples the implementation model from
the public interface: it implements its model, but offers
a public protocol that is convenient for the consumer
(also called the published language)
It is also possible to create multiple versions of the published
language, to serve different downstream applications or to
allow the downstream to migrate to new versions gradually
44
45. Integration patterns: Separate ways
The last collaboration option is not collaborate at all, e.g., there are teams
unwilling to collaborate:
- Communication issues: when teams have a hard time collaborating, it is
more cost-effective to go separate ways and duplicate functionalities in
multiple bounded contexts
- Generic subdomains: if the subdomain is generic it is more cost-effective
to integrate it locally in each bounded context (e.g., logging: one of the
contexts expose it as a service and the other use it)
45
47. Context map
A context map is a visual representation of the system’s bounded contexts
and the integrations between them
47
48. Why using context maps?
For many purposes:
- High-level design: a context map provides an overview of the system’s
components and its models
- Communication patterns: a context map depicts the communication
patterns among teams, e.g., which teams are collaborating and which
prefer less intimate integration patterns
- Organizational issues: a context map can give insight into organizational
issues. E.g., what does it mean if the consumers for a certain upstream
team all resort to implementing an ACL?
- Documentation: sharing the effort of updating the context map over
different teams helps in building a shared documentation
48