fr.cnrs.opentypo/
├── domain/ # Couche Domaine (Domain-Driven Design)
│ ├── entity/ # Entités JPA (Domain Entities)
│ ├── repository/ # Interfaces Repository (Domain Layer)
│ └── exception/ # Exceptions métier
│
├── application/ # Couche Application (Use Cases)
│ ├── dto/ # Data Transfer Objects
│ ├── mapper/ # Mappers (Entity <-> DTO)
│ ├── service/ # Services métier (Application Services)
│ └── usecase/ # Cas d'utilisation (si nécessaire)
│
├── infrastructure/ # Couche Infrastructure
│ ├── persistence/ # Implémentations Repository (Spring Data JPA)
│ ├── security/ # Configuration sécurité
│ ├── config/ # Configuration Spring
│ ├── exception/ # Handlers d'exceptions
│ └── migration/ # Migrations Flyway
│
├── presentation/ # Couche Présentation (JSF)
│ ├── bean/ # Managed Beans (ViewModels)
│ ├── converter/ # JSF Converters
│ └── validator/ # JSF Validators
│
└── common/ # Code partagé
├── util/ # Utilitaires
├── constant/ # Constantes
└── exception/ # Exceptions communes
- Interfaces dans
domain/repository/ - Implémentations dans
infrastructure/persistence/
- Services métier dans
application/service/ - Séparation des responsabilités
- DTOs dans
application/dto/ - Mappers dans
application/mapper/
- Pour créer des objets complexes (si nécessaire)
- Pour les algorithmes variables (authentification, etc.)
- Pour construire des objets complexes
- Séparation des Couches : Chaque couche ne dépend que des couches inférieures
- Dependency Inversion : Les interfaces sont dans le domaine, les implémentations dans l'infrastructure
- Single Responsibility : Chaque classe a une seule responsabilité
- DRY (Don't Repeat Yourself) : Pas de duplication de code