
Learn how hexagonal architecture, domain-driven design, TDD, and CQRS drive the creation of high-quality, decoupled software with testable core and clear business logic in C# and .NET.
Explore hexagonal architecture to decouple core business logic from external interfaces through ports and adapters, improving testability, modularity, and productivity in a customer management app.
Explore domain-driven design concepts like bounded context, domain model with entities and value objects, ubiquitous language, paired with hexagonal architecture, tdd, and cqrs for separate command and query models.
Prepare the development environment by installing dotnet (the latest version) and Visual Studio Community on Windows, then select the ASP.Net and Web Development workload to be ready for coding.
Create a dotnet project in Visual Studio for a coastal management customer service with create, update, delete, and list operations, framed by hexagonal architecture and bounded context with ubiquitous language.
Define the boundaries of the customer management service within a larger e-commerce platform by establishing a ubiquitous language and cohesive, decoupled modules using hexagonal architecture and dependency injection.
Build the domain objects layer with entities and value objects. Define the customer document value object, document type enum, and domain validations and exceptions for name, surname, and email.
Unit test domain models using hexagonal architecture by creating a domain tests project, organizing namespaces for value objects and exceptions, and validating the customer entity with positive and negative tests.
Implement a create customer use case in a hexagonal architecture with cqrs and mediator in dotnet, defining the command, dto, response, and handler.
Explore cqrs separation of write and read stores to implement a get customer query, with a queries class and a get customer query handler returning a customer response by id.
Connect your hexagonal architecture app to a database by defining ports and adapters, using Entity Framework, and mapping value objects with custom configuration before migrations.
Configure dependency injection to decouple adapters from the API in hexagonal and clean architecture, enabling swapping the DB or email sender without breaking consumers.
Migrate the db by naming it customers in appsettings.json, configure the data project's DbContext, and run the initial migration to create the customer table.
Demonstrates hexagonal architecture and DDD principles in .NET by decoupling the core from adapters, configuring and injecting sms and email adapters (Twilio, Gmail, Hotmail) via appsettings.json.
Apply TDD in a hexagonal architecture with DDD and CQRS for .NET to implement use case: create customer, via a command handler, mock ICreateCustomer, and DTO mapping to return the id.
Apply hexagonal architecture by sending a create customer command via the web api, using a mediator to a primary adapter and a secondary customer creator in a cqrs setup.
Learn how to implement a GetCustomer query in a cqrs pattern, decoupling reads from writes, via a http get controller, mediator, and data provider.
Explore how hexagonal architecture handles authentication, authorization, and permissions using a dotnet demo that issues a bearer token with roles and permissions to secure protected endpoints.
Conclude by separating the core from the rest of the world and modeling it with domain driven development, orchestrating application and domain logic, and separating dependencies to boost unit testability.
In this detailed course, you will master the application of fundamental concepts in hexagonal architecture, Domain-Driven Design (DDD), Test-Driven Development (TDD), and Command Query Responsibility Segregation (CQRS) using .NET. Through a blend of theoretical knowledge and practical exercises, you will learn to enhance your code's quality by employing techniques that emphasize testability, maintainability, and extensibility.
Additionally, software engineers who take this course will be able to lead their teams in refactoring efforts to improve code quality. You will be well-equipped to provide guidance on enhancing software quality, ensuring your projects meet high standards of excellence and adaptability. By the end of this course, you will have the skills to create robust, scalable, and easily maintainable software solutions, positioning yourself as a key player in driving technical excellence within your team.
This course is designed for both novice and experienced software engineers who want to deepen their understanding of advanced architectural patterns and methodologies. You will have access to real-world examples and hands-on projects that will solidify your learning experience. Our comprehensive curriculum covers everything from the basics to advanced topics, ensuring you have a thorough grasp of each concept. Through continuous feedback and support, you will refine your skills and gain confidence in implementing these techniques in your professional work. By the end of this journey, you will not only enhance your technical capabilities but also your ability to lead and mentor others in your organization.