Skip to content

oliver254/FlexiMarket

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🛒 FlexiMarket

.NET License Architecture CQRS DDD

FlexiMarket est une solution de microservice e-commerce moderne construite avec ASP.NET Core, implémentant les meilleures pratiques d'architecture logicielle : Clean Architecture, Domain-Driven Design (DDD), CQRS, et les principes SOLID.


🎯 Vision du Projet

FlexiMarket démontre comment construire un système de gestion de commandes e-commerce robuste, scalable et maintenable en appliquant des patterns architecturaux éprouvés. Ce projet sert à la fois de référence et de base solide pour développer des microservices complexes.

✨ Caractéristiques Principales

🏗️ Architecture

  • Clean Architecture - Séparation stricte en couches (Domain, Application, Infrastructure, API)
  • Domain-Driven Design - Modélisation riche du domaine métier avec agrégats, entités et value objects
  • CQRS Pattern - Séparation des commandes (write) et des requêtes (read)
  • Event-Driven - Communication asynchrone via domain events
  • Repository Pattern - Abstraction de la couche de persistance

🎨 Principes SOLID

  • Single Responsibility - Une classe, une responsabilité
  • Open/Closed - Ouvert à l'extension, fermé à la modification
  • Liskov Substitution - Substitution transparente des abstractions
  • Interface Segregation - Interfaces spécifiques et ciblées
  • Dependency Inversion - Dépendance vers les abstractions

💼 Use Cases Métier Complexes

  • Création et gestion du cycle de vie des commandes
  • Validation multi-étapes avec services externes
  • Gestion des stocks et réservations d'inventaire
  • Pré-autorisation et capture de paiements
  • Gestion des événements de domaine et audit trail

📁 Structure du Projet

FlexiMarket/
├── src/
│   ├── FlexiMarket.Domain/              # 🎯 Cœur métier
│   │   ├── Entities/                    # Agrégats et entités
│   │   │   ├── Order.cs
│   │   │   └── OrderLine.cs
│   │   ├── ValueObjects/                # Objets valeur immuables
│   │   │   ├── Money.cs
│   │   │   ├── Address.cs
│   │   │   └── CustomerId.cs
│   │   ├── Events/                      # Événements de domaine
│   │   │   └── OrderEvents.cs
│   │   └── Base/                        # Classes de base
│   │       ├── Entity.cs
│   │       ├── AggregateRoot.cs
│   │       └── ValueObject.cs
│   │
│   ├── FlexiMarket.Application/         # 🔧 Use Cases
│   │   ├── UseCases/
│   │   │   ├── Commands/                # Commandes (write)
│   │   │   │   ├── CreateOrderCommand.cs
│   │   │   │   └── SubmitOrderCommand.cs
│   │   │   └── Queries/                 # Requêtes (read)
│   │   │       └── GetOrderDetailsQuery.cs
│   │   └── Interfaces/                  # Contrats
│   │       ├── ICommand.cs
│   │       ├── IQuery.cs
│   │       └── Repositories/
│   │
│   ├── FlexiMarket.Infrastructure/      # 🔌 Implémentation
│   │   ├── Persistence/                 # Base de données
│   │   │   ├── OrderDbContext.cs
│   │   │   └── Repositories/
│   │   ├── Services/                    # Services externes
│   │   │   ├── InventoryService.cs
│   │   │   ├── PricingService.cs
│   │   │   └── PaymentService.cs
│   │   └── Messaging/                   # Event Bus
│   │       └── RabbitMqEventBus.cs
│   │
│   └── FlexiMarket.API/                 # 🌐 API REST
│       ├── Controllers/
│       │   └── OrdersController.cs
│       ├── Program.cs
│       └── appsettings.json
│
├── tests/
│   ├── FlexiMarket.Domain.Tests/
│   ├── FlexiMarket.Application.Tests/
│   └── FlexiMarket.API.Tests/
│
└── docs/
    ├── architecture.md
    └── use-cases.md

🚀 Technologies Utilisées

Backend

  • ASP.NET Core 8.0 - Framework web moderne
  • Entity Framework Core - ORM pour la persistance
  • MediatR - Pattern Mediator pour CQRS
  • FluentValidation - Validation des commandes
  • AutoMapper - Mapping objet-objet

Base de Données

  • SQL Server - Base de données relationnelle
  • Redis - Cache distribué

Messaging

  • RabbitMQ - Message broker pour les événements
  • MassTransit - Framework de messaging

Testing

  • xUnit - Framework de tests
  • Moq - Mocking framework
  • FluentAssertions - Assertions lisibles

DevOps

  • Docker - Conteneurisation
  • Docker Compose - Orchestration locale
  • Swagger/OpenAPI - Documentation API

🏃 Getting Started

Prérequis

- .NET 8.0 SDK
- SQL Server 2019+ ou Docker
- RabbitMQ (optionnel pour les événements)
- Visual Studio 2022 / VS Code / Rider

Installation

  1. Cloner le repository
git clone https://github.com/votre-username/fleximarket.git
cd fleximarket
  1. Restaurer les dépendances
dotnet restore
  1. Configurer la base de données
# Mettre à jour la connection string dans appsettings.json
cd src/FlexiMarket.API
dotnet ef database update
  1. Lancer l'application
dotnet run --project src/FlexiMarket.API
  1. Accéder à Swagger
https://localhost:5001/swagger

Utilisation avec Docker

# Lancer tous les services
docker-compose up -d

# L'API sera disponible sur http://localhost:8080

📖 Exemples d'Utilisation

Créer une commande

POST /api/orders
Content-Type: application/json

{
  "customerId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "shippingAddress": {
    "street": "123 Rue de la Paix",
    "city": "Paris",
    "postalCode": "75001",
    "country": "France"
  }
}

Ajouter des produits

POST /api/orders/{orderId}/items
Content-Type: application/json

{
  "productId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
  "quantity": 2,
  "unitPrice": {
    "amount": 29.99,
    "currency": "EUR"
  }
}

Soumettre une commande

POST /api/orders/{orderId}/submit

Récupérer les détails

GET /api/orders/{orderId}

🧪 Tests

Lancer tous les tests

dotnet test

Tests par projet

# Tests unitaires du domaine
dotnet test tests/FlexiMarket.Domain.Tests

# Tests d'intégration
dotnet test tests/FlexiMarket.API.Tests

Couverture de code

dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=opencover

🎓 Concepts Implémentés

Domain-Driven Design

  • Agrégats : Order est un agrégat qui contrôle OrderLine
  • Value Objects : Money, Address - objets immuables
  • Domain Events : Communication entre agrégats
  • Ubiquitous Language : Vocabulaire métier partagé

CQRS Pattern

  • Commands : Modifications d'état via handlers dédiés
  • Queries : Lecture optimisée avec DTOs
  • Séparation : Modèles write et read différents

Event-Driven Architecture

  • Domain Events : OrderCreatedEvent, OrderSubmittedEvent
  • Event Handlers : Traitement asynchrone
  • Event Sourcing Ready : Architecture préparée pour l'event sourcing

🛡️ Bonnes Pratiques

Sécurité

  • ✅ Validation des entrées avec FluentValidation
  • ✅ Protection CSRF
  • ✅ Rate limiting
  • ✅ Authentication JWT (à implémenter)

Performance

  • ✅ Async/await partout
  • ✅ Pagination des résultats
  • ✅ Cache Redis pour les lectures
  • ✅ Indexation des requêtes fréquentes

Qualité du Code

  • ✅ Respect des principes SOLID
  • ✅ Couverture de tests > 80%
  • ✅ Code reviews systématiques
  • ✅ Analyse statique avec SonarQube

📈 Roadmap

v1.0 (Actuel)

  • Architecture de base
  • Gestion des commandes
  • CQRS Pattern
  • Domain Events

v1.1 (Prochain)

  • Authentication & Authorization
  • API Gateway avec Ocelot
  • Service de catalogue produits
  • Elasticsearch pour la recherche

v2.0 (Futur)

  • Event Sourcing complet
  • Saga Pattern pour les transactions distribuées
  • GraphQL API
  • Microservices additionnels (Inventory, Payment, Shipping)

🤝 Contribution

Les contributions sont les bienvenues ! Veuillez suivre ces étapes :

  1. Fork le projet
  2. Créer une branche feature (git checkout -b feature/AmazingFeature)
  3. Commit les changements (git commit -m 'Add AmazingFeature')
  4. Push vers la branche (git push origin feature/AmazingFeature)
  5. Ouvrir une Pull Request

Guidelines

  • Respecter les conventions de code C#
  • Ajouter des tests pour toute nouvelle fonctionnalité
  • Mettre à jour la documentation
  • S'assurer que tous les tests passent

📝 License

Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.


👥 Auteurs


🙏 Remerciements

  • Inspiration de Clean Architecture par Uncle Bob
  • Patterns CQRS de Martin Fowler
  • Communauté Domain-Driven Design
  • Tous les contributeurs qui ont participé à ce projet

📞 Contact & Support


Made with ❤️ by the FlexiMarket Team

⬆️ Retour en haut

About

🛒 FlexiMarket - Architecture e-commerce de référence : Clean, DDD, CQRS & SOLID

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages