# Core Module ## Überblick Das Core-Modul bildet das Fundament des gesamten Meldestelle-Systems und implementiert den **Shared Kernel** nach Domain-Driven Design Prinzipien. Es stellt gemeinsame Domänenkonzepte, Utilities und Infrastrukturkomponenten bereit, die von allen anderen Modulen (members, horses, events, masterdata, infrastructure) verwendet werden. ## Architektur Das Core-Modul ist nach den Prinzipien der Clean Architecture in zwei Hauptkomponenten unterteilt: ``` core/ ├── core-domain/ # Shared Domain Layer │ ├── model/ # Gemeinsame Domain Models │ │ ├── BaseDto.kt # Basis-DTO-Klassen │ │ └── Enums.kt # Gemeinsame Enumerationen │ ├── serialization/ # Serialisierung │ │ └── Serializers.kt # Custom Serializers │ └── event/ # Domain Events │ └── DomainEvent.kt # Event-Infrastruktur └── core-utils/ # Shared Utilities ├── config/ # Konfiguration │ ├── AppConfig.kt # Anwendungskonfiguration │ └── AppEnvironment.kt # Umgebungskonfiguration ├── database/ # Datenbank-Utilities │ ├── DatabaseConfig.kt # Datenbank-Konfiguration │ └── DatabaseFactory.kt # Datenbank-Factory ├── discovery/ # Service Discovery │ └── ServiceRegistration.kt # Service-Registrierung ├── error/ # Fehlerbehandlung │ └── Result.kt # Result-Type für Fehlerbehandlung ├── serialization/ # Serialisierung │ └── Serialization.kt # Serialisierungs-Utilities └── validation/ # Validierung ├── ValidationResult.kt # Validierungsergebnisse ├── ValidationUtils.kt # Validierungs-Utilities └── ApiValidationUtils.kt # API-Validierung ``` ## Core-Domain Komponenten ### 1. Gemeinsame Enumerationen (`Enums.kt`) Zentrale Enumerationen, die modulübergreifend verwendet werden, um eine konsistente "Ubiquitäre Sprache" zu etablieren. Dazu gehören `SparteE`, `PferdeGeschlechtE`, `RolleE` und `BerechtigungE`. ### 2. Basis-DTOs (`BaseDto.kt`) Gemeinsame Basisklassen für Data Transfer Objects, die eine konsistente API-Struktur im gesamten System sicherstellen, wie `ApiResponse` für Standard-Antworten und `PagedResponse` für paginierte Listen. ### 3. Domain Events (`DomainEvent.kt`) Die Event-Sourcing Infrastruktur für Domain-Driven Design. Definiert die Basis-Interfaces (`DomainEvent`, `DomainEventPublisher`, `DomainEventHandler`) für die asynchrone Kommunikation zwischen den Services. ### 4. Custom Serializers (`Serializers.kt`) Spezialisierte Serializer für Kotlin-Typen wie `Uuid`, `Instant` und `LocalDate`, um eine einheitliche JSON-Serialisierung über alle Services hinweg zu garantieren. ## Core-Utils Komponenten ### 1. Fehlerbehandlung (`Result.kt`) Eine funktionale und typsichere `Result`-Klasse zur Behandlung von vorhersehbaren Geschäftsfehlern ohne den Einsatz von Exceptions. Dies führt zu robusterem und besser lesbarem Code in den Anwendungs-Services. ### 2. Konfiguration (`AppConfig.kt`, `AppEnvironment.kt`) Eine zentrale und flexible Konfigurationsverwaltung, die Einstellungen aus verschiedenen Quellen (Umgebungsvariablen, Property-Dateien) für unterschiedliche Umgebungen (`DEVELOPMENT`, `PRODUCTION` etc.) laden kann. ### 3. Datenbank-Utilities (`DatabaseFactory.kt`, `DatabaseConfig.kt`) Stellt die zentrale Logik für Datenbankverbindungen bereit. Die `DatabaseFactory` konfiguriert einen hoch-performanten Connection Pool (HikariCP) und integriert das Industrie-Standard-Tool **Flyway** für die automatische Ausführung von versionierten SQL-Datenbankmigrationen beim Start eines Service. ### 4. Validierung (`ValidationUtils.kt`, `ApiValidationUtils.kt`) Eine umfassende Sammlung von wiederverwendbaren Hilfsfunktionen zur Validierung von Daten, von einfachen Längenprüfungen bis hin zu komplexen API-Parameter-Validierungen. ### 5. Service Discovery (`ServiceRegistration.kt`) Eine Implementierung zur Registrierung von Microservices bei einem Consul-Server, um eine dynamische Service-Landschaft zu ermöglichen. ## Verwendung in anderen Modulen Andere Module deklarieren eine Abhängigkeit zum `core`-Modul, um auf dessen Bausteine zugreifen zu können. ### API Responses ```kotlin // In API Controllers @RestController class MemberController { @GetMapping("/api/members/{id}") fun getMember(@PathVariable id: String): ApiResponse { // ... } } ``` ### Result-Type Usage ```kotlin // In Use Cases class CreateMemberUseCase { suspend fun execute(member: Member): Result { // ... } } ``` ## Best Practices ### 1. Shared Kernel Prinzipien - **Minimale Oberfläche**: Nur wirklich gemeinsame Konzepte - **Stabile APIs**: Änderungen beeinflussen alle Module - **Versionierung**: Sorgfältige Versionierung bei Breaking Changes - **Dokumentation**: Umfassende Dokumentation für alle Komponenten ### 2. Fehlerbehandlung - **Result-Type verwenden**: Statt Exceptions für erwartete Geschäftsfehler, um die Geschäftslogik klar und explizit zu halten. - **Validierung**: Frühe Validierung mit ValidationResult ### 3. Serialisierung - **Custom Serializers**: Für spezielle Datentypen werden die bereitgestellten Serializer verwendet, um Konsistenz zu gewährleisten. - **Schema-Evolution**: Bei der Weiterentwicklung von DTOs und Events muss die Abwärtskompatibilität berücksichtigt werden. ## Zukünftige Erweiterungen 1. **Event Sourcing Enhancements** - Erweiterte Event Store Features 2. **Distributed Tracing** - OpenTelemetry Integration 3. **Metrics Collection** - Micrometer Integration 4. **Configuration Management** - Externalized Configuration 5. **Security Utilities** - Encryption/Decryption Utilities 6. **Caching Abstractions** - Cache-Provider Abstractions 7. **Async Utilities** - Coroutines Utilities 8. **Testing Utilities** - Test-Helpers und Fixtures --- **Letzte Aktualisierung**: 28. Juli 2025 Für weitere Informationen zur Gesamtarchitektur siehe [README.md](../README.md).