Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/falberthen/EcommerceDDD
Experimental full-stack application using Domain-Driven Design, CQRS, and Event Sourcing.
https://github.com/falberthen/EcommerceDDD
angular clean-architecture cqrs ddd domain-driven-design dotnet6 event-sourcing marten netcore spa
Last synced: 4 months ago
JSON representation
Experimental full-stack application using Domain-Driven Design, CQRS, and Event Sourcing.
- Host: GitHub
- URL: https://github.com/falberthen/EcommerceDDD
- Owner: falberthen
- License: mit
- Created: 2020-09-28T23:36:18.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2024-01-10T02:05:51.000Z (6 months ago)
- Last Synced: 2024-01-10T04:40:36.333Z (5 months ago)
- Topics: angular, clean-architecture, cqrs, ddd, domain-driven-design, dotnet6, event-sourcing, marten, netcore, spa
- Language: C#
- Homepage: https://falberthen.github.io/posts/ecommerceddd-pt1
- Size: 9.83 MB
- Stars: 267
- Watchers: 10
- Forks: 44
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Lists
- awesome-software-architecture - falberthen/EcommerceDDD
README
![Build](https://github.com/falberthen/ecommerceddd/actions/workflows/ecommerceddd-build.yml/badge.svg)
[![License](https://img.shields.io/github/license/falberthen/ecommerceddd.svg)](LICENSE)## Welcome to Ecommerce DDD
This project is an experimental full-stack application I use to combine several cutting-edge technologies and architectural patterns. Thanks for getting here! please give a ⭐ if you liked the project. It motivates me to keep improving it.
```
├── Core
├── Core.Infrastructure
│
├── Crosscutting
│ ├── ApiGateway
│ └── IdentityServer
│
├── Services
│ ├── CustomerManagement
│ ├── InventoryManagement
│ ├── OrderProcessing
│ ├── PaymentProcessing
│ ├── ProductCatalog
| | └─ EcommerceDDD.ProductCatalog
│ │ ├── API
│ │ ├── Application
│ │ ├── Domain
│ │ └── Infrastructure
│ ├── QuoteManagement
│ └── ShipmentProcessing
│
├── SPA
└── docker-compose
```- **Core**
It defines the building blocks and abstractions used on all underlying projects. Its nature is very abstract, with no implementations.- **Core.Infrastructure**
It holds some abstractions and implementation for infrastructure to be used by all microservices and underlying dependencies.- **Crosscutting**
It contains project implementations that cross-cut all microservices, such as `IdentityServer` and `API gateway`.- **Services**
The microservices composing the backend are built to be as simple as possible, structured as a vertically sliced structure with `API`, `Application`, `Domain,` and `Infrastructure.````
├── EcommerceDDD.ProductCatalog
│ ├── API
│ ├── Application
│ ├── Domain
│ └── Infrastructure
```- **API**
RESTful API for enabling communication between client and server.- **Application**
It orchestrates the interactions between the external world and the domain to perform application tasks through use cases by `handling commands and queries`.- **Domain**
A structured implementation of the domain through aggregates, commands, value objects, domain services, repository definitions, and domain events.- **Infrastructure**
It is a supporting library for upper layers, handling infrastructural matters such as data persistence with *implementing repositories*, database mapping, and external integrations.- **SPA (Single Page Application)**
A lightweight Angular-based `SPA` providing a functional and user-friendly UI.
## Technologies used
-
ASP.NET Core API and C# 12
for cross-platform backend with:
- .NET 8
- Ocelot 22.0.1
- Marten 6.4.1
- Entity Framework Core 8.0.0
- Postgres for Entity Framework Core 8.0.0
- ASP.NET Core Identity 8.0.0
- ASP.NET Core Authentication JwtBearer 8.0.0
- Duende IdentityServer 6.3.8
- MediatR 12.2.0
- Polly 8.2.1
- Fluent Assertions 6.12.0
- XUnit 2.6.5
- NSubstitute 5.1.0
- Swagger 6.5.0
- Confluent Kafka 2.3.0
-
Angular 17 and TypeScript 5.2.0 for the frontend with:
- NgBootstrap 16.0.0/ Bootstrap 5.2.3
- Font Awesome 6.4.
- Toastr 17.0.2
## What do you need to run it
#### Running the microservices using Docker
The project was designed to be easily run within docker containers, hence all you need is 1 command line to up everything. Make sure you have `Docker` installed and have fun!
- Download Docker: Docker Desktop with support for WLS 2
Using a terminal, run:
```console
$ docker-compose up
```
You can also set the `docker-compose.dcproj` as a Startup project on Visual Studio if you want to run it while debugging.
### Running the Angular SPA
Using a terminal, navigate to `EcommerceDDD.Spa` and run for the following commands the node packages and serving the SPA on `http://localhost:4200` respectively:
```console
$ npm install #first time only
$ ng serve
```