Sorry, this page is no longer available
We may earn an affiliate commission when you visit our partners.
Course image
Rajeev Sakhuja

PS: Focus is on designing Microservices not coding

  • No specific Microservices framework in use

  • All sample code is in plain JAVA to demonstrate/clarify understanding of DDD patterns, etc.

  • Models are developed in UML - using the PlantUML tool

  • PostgreSQL/MongDB/RabbitMQ/Kafka - free instances created on the cloud for demos & walkthroughs

PLEASE Do NOT join the course if you are looking for tutorials on Microservices Coding or specific framework.

What is this course about?

Read more

PS: Focus is on designing Microservices not coding

  • No specific Microservices framework in use

  • All sample code is in plain JAVA to demonstrate/clarify understanding of DDD patterns, etc.

  • Models are developed in UML - using the PlantUML tool

  • PostgreSQL/MongDB/RabbitMQ/Kafka - free instances created on the cloud for demos & walkthroughs

PLEASE Do NOT join the course if you are looking for tutorials on Microservices Coding or specific framework.

What is this course about?

Microservices is a new way of building software in which an application is composed of an independent set of services. The biggest benefit of Microservices is that it enables an organization to transform at a very rapid pace. This speed to market is achieved due to the independent nature of the services that make up a Microservices application. Companies like Amazon, Netflix and Etsy have proven the value of Microservices beyond doubt.

Many organizations today are looking to adopt Microservices. These organizations are investing in technologies, tools, skills and are changing their software development and delivery processes as well. But still many organizations are failing to achieve the full benefits of Microservices; in fact many organizations feel that they have created technical debt by adopting Microservices.

So why is it that some organizations have been successful in adopting Microservices while others are not. One common aspect I have observed in companies that fail to adopt Microservices is that they treat Microservices as a purely technology initiative. They do not spend time in understanding the business aspects of their Microservices applications  .

Microservices is NOT just about technology

The key element of the Microservices architecture is that services are Independent. This independent aspect of the service is what makes it possible for Microservices to change independently of other services. If scope of the microservices is leading to inter-dependencies between services then it would lead to a need for change coordination between teams which in turn will lead to the same problems we have with Monolithic applications . Release cycles will be longer and there will be no benefit of the adoption of Microservices.

To ensure that these is no interdependencies between Microservices, a Microservices architect needs to understand the domain and then decide on the boundary and scope of the Microservices. This is where Domain Driven Design comes into picture. Once the Microservices business boundaries are defined the services should be built using appropriate Microservices design patterns and technologies.

Teams working on Microservices should not just look at the technical aspects of the service but MUST keep in mind that there are other considerations that play a critical part in the success of Microservices initiative. In order to

Role of a Microservices Architect

An IT professional working in the role of Microservices architect is responsible for may aspects depending on the maturity of Microservices adoption in their organization. Here are the list of activities that the architects is responsible for:

  • Evaluate the business benefits of Microservices for their specific organization

  • Build a Business case for Microservices

  • Educate the Business & IT stakeholders on pros/cons of Microservices

  • Apply Domain Driven Design to demarcate the boundaries of Microservices

  • Define the domain model for the Microservices

  • Do the technical design of Microservices

  • Guide and Mentor the Microservices teams

  • Evaluate the technologies | frameworks for the realization of Microservices

  • Build proof of concepts to show how things work

How will this course help?

This course will help developers & architects in building skills needed for successful implementation of Microservices applications. It consists of a combination of concepts, UML modelling and working code to demonstrate the implementation of Microservices. Students will learn the concepts of Domain driven design by way of common industry examples and a case study (ACME travels). 

Focus is on Architecture, Design and Development of Microservices.

1. Transformation & Microservices

2. Domain Driven Design

3. Applying the DDD strategic & tactical pattern

4. Event Driven Architecture

5. Event Storming

6. Data Management

7. Messaging

8. Distributed Transactions

9. API

IMPORTANT:

Code Samples

Focus is on the Microservices design not coding.

  • All of the sample code is in plain JAVA

  • Course does NOT cover any specific framework

  • SpringBoot is used in samples for API/GraphQL section

Please check out the course preview lectures before enrolling the course.

  • Review the topics covered

  • Make sure you understand instructor's accent

Pre-Requisites

  • Basic understanding of JAVA or any other programming language

  • Some experience with software development practices

PS:

Hand on part is optional but students are encouraged to do hands on tasks to get a better feel of the design patterns.

Enroll now

What's inside

Learning objectives

  • Domain driven design
  • Architecting microservices application
  • Design patterns for building microservices & distributed systems
  • Event driven architecture
  • Developing api for microservices
  • Event storming
  • Develop a business case for microservices

Syllabus

Course Ouline
  • Quick intro of the instructor

  • Course outline

  • Tips to get the most out of the course

Read more

By the end of this lesson students will have the development environment setup on their local machine.

  • Monolithic Architecture

  • Microservices Architecture

  • Realization of Microservices Architecture

Discussion on how Business Transformation is accelerated by Microservices Architecture.

  • How teams are organized for building Microservices applications

  • Business capabilities and Microservices

  • Business Benefits of Microservices

Discussion on pros and cons of Microservices architecture from technology perspective.

Understanding the domain and domain models

  • Conceptual vs Architectural models

  • Architecture vs Design

Discussion on commonly used modelling techniques and Architectural styles.

Students will be introduced to Domain Driven Design in this lesson.

Define models and elements of domain models.

  • Enterprise | Unified domain models

  • Knowledge crunching exercise

Overview of the topics covered in this section.

  • Understand the use of business model canvas

  • Learn how the Business model canvas is created

  • Example: Uber's Business Model Canvas

In this exercise we will create the Business Model Canvas for Acme Travels

Learn about the 3 types of sub domains

  • Core

  • Support

  • Generic

In this exercise we will categorize ACME Travel's subdomains in the core/support/generic categories.

Understand the meaning or Context | Business Context

Bridging the gap between Business and Technology languages. Lesson introduces students to DDD Ubiquitous Language.

Discussion on characteristics of Ubiquitous Language.

In this lesson we will develop the Ubiquitous Language terms for ACME Travels Sales subdomain.

Introduction to the DDD Strategic pattern : Bounded Context

By end of this lesson students should be able to explain the Bounded Contexts.

Students will learn techniques for discovering the Bounded Contexts in a problem space.

In this exercise we will try to identify Bounded Contexts in the ACME travels business domain.

  • Big Ball of Mud

  • Challenges with Bounded Context dependencies

  • Context Maps

DDD Strategic Patterns:

  • Separate Ways

  • Partnership pattern

  • Shared Kernel

DDD Strategic Patterns:

  • Customer-Supplier pattern

  • Conformist pattern

  • Anti corruption layer pattern

DDD Strategic Patterns:

  • Open Host Service

  • Published Language

In this exercise we will draw up the context mapping in a banking domain.

DDD Tactical Pattern : Entity pattern

DDD Tactical Pattern : Value Object pattern

In this exercise we will identity | design the Entity and VO in the ACME Travels sales model

Walkthrough of the JAVA code  & UML for ACME Travel Sales entities and value objects

DDD Tactical Pattern : Aggregate pattern

In this exercise we will design an Aggregate in the ACME Travel Sales model

Walkthrough of JAVA code and UML model for the Aggregate(s) in the ACME sales model

Discussion on Anemic models and how to address anemic models

DDD Tactical Pattern : Repository pattern

Walkthrough of the JAVA code and UML model for ACME travel repository

DDD Tactical Pattern : Services patterns

DDD Tactical Pattern : Application Services pattern

DDD Tactical Pattern : Infrastructure Services pattern

Walkthrough of the Java code and UML for the Domain Services in ACME travel model

Walkthrough of JAVA code and UML for the ACME application and infrastructure services

Discussion of communication patterns used in Microservices

Discussion on the Microservices interaction patterns

Introduction to Events Driven Architecture and its importance in development of Microservices applications.

Walkthrough of pub-sub messaging pattern using the RabitMQ messaging broker.

Introduction to domain events

Implementing domain events with a static class broker framework pattern

In this exercise we will Identify the ACME travel domain events

Walkthrough of the JAVA code and UML for the implementation of the domain events for ACME travel.

DDD Tactical Pattern : Integration Events

In this exercise we will identify the Integration Events in the ACME travel domain

Walkthrough of JAVA code and UML for the implementation of ACME 

Events storming is a technique used for creating shared knowledge of the domain. This lesson will introduce students to event storming.

Elements of event storming flow.

Discussion on how to prepare for an Event Storming workshop.

The process followed in an Event Storming workshop.

Simulation of Event Storming Workshop for ACME sales

Challenges with use of Shared Database in monolithic applications

Introduction to SOA and how it addressed some of the challenges of shared database in Monoliths

Microservices have independent persistent layer. This lesson discusses the pros of separate database pattern for microservices.

Option for persistence layer for brownfield applications

Options for breaking a shared database to separate databases

Introduction to CQRS, Event Sources and SAGA patterns

Command Query Separation (CQS) Pattern

  • Setup PostgreSQL database for testing

  • Walkthrough of JDBC Repo implementation

  • Considerations for CQ pattern

  • Read vs Write performance

  • Introduction to "Collaborative Domains"

Walkthrough of JAVA code and UML for CQS realization

Discussion on CQRS pattern

Options for data replication between READ and WRITE sides

Exercise requires you to design CQRS for ACME Travels

Walkthrough of JAVA code and UML for CQRS implementation

  • Event Sourcing pattern

  • Considerations for building Event Store

Set up a NoSQL MongoDB for testing out the CQRS

Walkthrough of JAVA code UML for version 1 of CQRS implementation for ACME

Walkthrough of JAVA code UML for version 2 of CQRS implementation for ACME

As a best practice always design distributed systems for failures

Traffic lights

Read about what's good
what should give you pause
and possible dealbreakers
Focuses on Domain Driven Design (DDD) principles, which are essential for defining microservice boundaries and scopes, ensuring service independence and alignment with business needs
Emphasizes the importance of understanding the business aspects of microservices applications, which is crucial for avoiding technical debt and achieving the full benefits of a microservices architecture
Uses plain JAVA for sample code, which allows learners to focus on understanding DDD patterns and microservices design principles without being tied to a specific framework
Requires a basic understanding of JAVA or another programming language and some experience with software development practices, which may exclude junior developers or those new to programming
Uses UML and PlantUML for modeling, which may require learners to have prior knowledge or be willing to learn these tools for effective participation
Does not focus on coding tutorials or specific frameworks, which may disappoint learners seeking hands-on coding experience with particular microservices technologies

Save this course

Create your own learning path. Save this course to your list so you can find it easily later.
Save

Reviews summary

Mastering ddd for microservices architecture

According to learners, this course provides a highly valuable deep dive into Domain Driven Design for Microservices architecture. Students praise the thorough explanation of strategic and tactical DDD patterns and find the concepts clearly explained. The ACME Travels case study is seen as extremely helpful for practical application. The course focuses explicitly on design and architecture, not coding, which is appreciated by many seeking theoretical grounding, though a few wanted more implementation detail or found Java examples basic. Overall sentiment is overwhelmingly positive, providing a solid architectural foundation.
Not a coding course, focuses on principles.
"PLEASE Do NOT join the course if you are looking for tutorials on Microservices Coding..."
"The description said 'design not coding' but the Java examples are too basic to be truly helpful. It feels very academic."
"Not a coding course, which is a plus for me."
"I found the Java examples a bit weak. I was hoping for something that bridges the gap between theory and practical implementation better..."
Case study helps apply theoretical concepts.
"The case study examples are very helpful."
"The ACME Travels case study helps immensely in applying the concepts."
"The case study approach makes it easy to follow along and apply the patterns."
"The ACME case study is a fantastic way to illustrate the application of Bounded Contexts, Aggregates, etc."
Explains strategic & tactical DDD patterns.
"The strategic and tactical patterns are explained in detail..."
"The coverage of Bounded Contexts and Aggregate roots was very good."
"The explanations of Event Storming, CQRS, and SAGA patterns were very practical."
"Covers event-driven architecture and data consistency patterns effectively."
Deep dive into design, not coding.
"This course is exactly what I was looking for. It focuses heavily on the design and architectural aspects of Microservices and Domain Driven Design."
"It truly is an architecture-focused course."
"As advertised, it's about architecture, not coding. Exactly what I needed."
"Recommended for those focused on design."

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Domain Driven Design & Microservices for Architects with these activities:
Review Object-Oriented Programming Principles
Reinforce your understanding of OOP principles, which are foundational to Domain-Driven Design and microservices architecture.
Show steps
  • Review the concepts of encapsulation, inheritance, and polymorphism.
  • Practice applying these principles in a simple coding exercise.
Practice Identifying Bounded Contexts
Improve your ability to identify bounded contexts by working through several practice scenarios.
Show steps
  • Find several case studies or business scenarios online.
  • For each scenario, identify the potential bounded contexts.
  • Justify your choices based on DDD principles.
Review 'Domain-Driven Design: Tackling Complexity in the Heart of Software' by Eric Evans
Gain a deeper understanding of Domain-Driven Design principles by studying the foundational text on the subject.
View Domain-driven Design on Amazon
Show steps
  • Read the key chapters on strategic and tactical DDD patterns.
  • Take notes on the core concepts and examples.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Review 'Building Microservices' by Sam Newman
Expand your knowledge of microservices architecture by studying a practical guide to building and deploying microservices.
Show steps
  • Read the chapters on service decomposition and communication patterns.
  • Take notes on the key considerations for building microservices.
Model a Domain Using Event Storming
Apply Event Storming techniques to model a real-world domain, solidifying your understanding of this collaborative discovery method.
Show steps
  • Choose a domain you are familiar with, such as e-commerce or logistics.
  • Gather a group of people with knowledge of the domain.
  • Facilitate an Event Storming session to identify domain events, commands, and aggregates.
  • Document the results of the Event Storming session in a diagram.
Design a Microservice API using OpenAPI
Practice designing a RESTful API for a microservice using the OpenAPI specification, reinforcing your understanding of API design principles.
Show steps
  • Choose a bounded context from your domain model.
  • Define the resources and operations for the API.
  • Write the OpenAPI specification using YAML or JSON.
  • Generate server stubs or client SDKs from the OpenAPI specification.
Write a Blog Post on Domain-Driven Design
Solidify your understanding of Domain-Driven Design by explaining its core concepts in a blog post.
Show steps
  • Choose a specific aspect of DDD, such as bounded contexts or aggregates.
  • Research the topic and gather relevant information.
  • Write a clear and concise blog post explaining the concept.
  • Include examples and diagrams to illustrate the concept.

Career center

Learners who complete Domain Driven Design & Microservices for Architects will develop knowledge and skills that may be useful to these careers:
Solutions Architect
A solutions architect designs and oversees the implementation of software solutions, ensuring they align with business needs and technical requirements. This course emphasizing domain driven design and microservices helps a solutions architect define the boundaries and scope of microservices, a critical aspect in building independent services. Understanding domain models, as covered in the course, also helps the architect to make informed decisions on technology and frameworks for microservices. The course also helps a solutions architect to design and develop APIs for microservices.
Enterprise Architect
An enterprise architect aligns IT strategy with business goals, creating blueprints for the organization's technology landscape. This course helps the enterprise architect understand how to evaluate the business benefits of microservices and build a business case for their implementation. The course's coverage of domain driven design can help the enterprise architect demarcate microservice boundaries. In addition, the course helps to define domain models for the microservices. An enterprise architect is expected to educate business and IT stakeholders on the pros and cons of microservices.
Software Architect
A software architect is responsible for high level design choices and technical standards, including software coding standards, tools, platforms and technologies. Software Architect uses domain driven design to demarcate the boundaries of microservices, and the course offers specific training in this area. Software architects define the domain model for the microservices. This course will help a software architect build skills needed for successful implementation of microservices applications, and teaches design patterns for building microservices and distributed systems. The course also helps to develop APIs for microservices.
Application Architect
Application architects focus on the structure and interaction of software applications. This course helps the application architect understand the design and development of APIs for microservices. It teaches the student how to apply domain driven design to demarcate the boundaries of microservices. In addition, the course covers design patterns for building microservices and distributed systems. An application architect is able to define the domain model for the microservices.
System Architect
System architects design and manage complex computer systems, ensuring they meet performance, security, and scalability requirements. This course, focusing on domain driven design and microservices, will help a system architect build skills needed for successful implementation of microservices applications. The course also helps to design patterns for building microservices and distributed systems. Studying this course will helps the candidate to develop APIs for microservices, and to apply event driven architecture approaches.
Principal Engineer
A principal engineer is a senior technical leader responsible for guiding engineering teams and making critical technology decisions. This course helps the principal engineer build a business case for microservices, and to educate business and IT stakeholders on the pros and cons of microservices. The course also emphasizes design patterns for building microservices, and distributed systems. Principal Engineers define the domain model for the microservices.
Lead Developer
Lead developers guide development teams and ensure code quality and adherence to architectural standards. This course helps lead developers understand the concepts of domain driven design, and the application of strategic and tactical patterns. As a lead developer, you can apply domain driven design to demarcate the boundaries of microservices. Additionally, the course assists in developing APIs for microservices.
Technical Lead
Technical leads oversee technical aspects of projects, providing guidance and mentorship to development teams. This course may assist technical leads in understanding domain driven design and its strategic and tactical patterns, which is important for properly scoping a project. Technical leads should be familiar with the material in this course that covers how to apply domain driven design to demarcate the boundaries of microservices. Furthermore, a technical lead should be well versed in how to develop APIs for microservices.
Software Development Manager
Software development managers oversee software development projects, ensuring timely delivery and alignment with business objectives. This course may help software development managers understand how to evaluate the business benefits of microservices for their organization. The course helps to build a business case for microservices, and to educate business and IT stakeholders on the pros and cons of microservices. By learning a bit about domain driven design, a software development manager can help apply the methodology to demarcate the boundaries of microservices.
Data Architect
A data architect designs and manages the organization's data infrastructure, ensuring data quality, accessibility, and security. This course may help the data architect understand the principles of event driven architecture. The course also helps one to design and develop APIs for microservices. This is relevant because as a data architect, you may need to evaluate the technologies and frameworks for the realization of microservices.
Cloud Architect
Cloud Architects design and implement cloud computing solutions, ensuring scalability, security, and cost-effectiveness. The cloud architect can benefit from this course by understanding how to evaluate the business benefits of microservices for their organization. The course helps you to build a business case for microservices, and to educate business and IT stakeholders on the pros and cons of microservices. A cloud architect can apply domain driven design to demarcate the boundaries of microservices.
DevOps Engineer
DevOps engineers streamline software development and deployment processes through automation and collaboration. This course may help the DevOps engineer build a business case for microservices, and to educate business and IT stakeholders on the pros and cons of microservices. DevOps Engineers guide and mentor the microservices teams. It also aids in the evaluation of technologies and frameworks for the realization of microservices.
Data Engineer
Data engineers build and maintain data pipelines, transforming data for analysis and reporting. This course may help the data engineer to understand the business benefits of microservices for their organization. It may also help a data engineer to apply domain driven design to demarcate the boundaries of microservices. A data engineer is able to define the domain model for the microservices.
Backend Developer
Backend developers build and maintain the server side logic and databases that power applications. This course may help the backend developer understand how to evaluate the business benefits of microservices for their organization. The course emphasizes design patterns for building microservices and distributed systems. Backend Developers define the domain model for the microservices. They also develop APIs for microservices.
Full-Stack Developer
Full stack developers work on both the front end and back end of applications, handling all aspects of development. This course may help the full stack developer understand how to evaluate the business benefits of microservices for their organization. The course teaches how to apply domain driven design to demarcate the boundaries of microservices. Full stack developers may find the information on developing APIs for microservices to be helpful.

Reading list

We've selected two books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Domain Driven Design & Microservices for Architects.
Is the seminal work on Domain-Driven Design. It provides a comprehensive guide to understanding and applying DDD principles in software development. It is highly recommended as a reference text for this course, as it provides the theoretical foundation for many of the concepts discussed. This book adds significant depth to the course material and is considered essential reading for anyone serious about mastering DDD.
Provides a practical guide to building microservices architectures. It covers topics such as service decomposition, communication patterns, and deployment strategies. It serves as a valuable reference for understanding the practical aspects of microservices and complements the DDD concepts covered in the course. This book is useful as additional reading to expand on the course material.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Similar courses are unavailable at this time. Please try again later.
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2025 OpenCourser