Lab 13: Freie Implementierung - Vertiefung und Erweiterung¶
Wähle eine oder mehrere der folgenden Vertiefungsoptionen und implementiere sie eigenständig.
AcceptOffer - ein weiterer Use Case (einfach)¶
Implementiere den AcceptOfferUseCase mit Command, Application Service, REST-Endpoint und Tests. Der Flow im Überblick:
POST /api/brokerage/processes/{id}/offersmit Angebotsbetrag und Interessent- Command-Objekt
AcceptOfferCommand(UUID brokerageProcessId, String prospectName, BigDecimal amount) - Application Service lädt den
BrokerageProcess, ruftacceptOffer()auf und speichert - REST-Endpoint gibt 201 mit der Angebots-ID zurück
- Tests: Unit-Test für Use Case, WebMvcTest für Controller
Anti-Corruption Layer mit OpenImmo-XML (mittel)¶
Externe Systeme liefern Daten in fremden Formaten. Erstelle einen Adapter, der ein (simuliertes) OpenImmo-XML-Dokument entgegennimmt und in die Domain-Objekte der Objektverwaltung übersetzt.
Definiere dazu ein einfaches OpenImmo-XML-Format (z.B. <openimmo><anbieter><immobilie><geo><plz>50667</plz><ort>Köln</ort></geo></immobilie></anbieter></openimmo>), erstelle einen OpenImmoTranslationService im Package adapter.acl und verwende JAXB oder einfaches String-Parsing für die Übersetzung. Vergiss die Tests nicht.
CQRS: Separates Read Model (mittel)¶
Listenansichten brauchen andere Daten als Schreiboperationen. Erstelle ein separates Read Model BrokerageProcessOverview als eigene @Entity (oder Spring Data JPA Projection) mit den Feldern id, address (als String), status, viewingCount, offerCount.
Dazu gehören ein dedizierter BrokerageProcessQueryService und ein separater REST-Endpoint GET /api/brokerage/processes/overview.
Kafka-Anbindung skizzieren (schwer)¶
Wie sähe eine Kafka-basierte Event-Kommunikation zwischen Bounded Contexts aus? Füge spring-kafka als Dependency hinzu und erstelle sowohl einen Outbound-Adapter KafkaBrokerageProcessEventPublisher, der Domain Events auf ein Kafka-Topic schreibt, als auch einen Inbound-Adapter KafkaAcquisitionEventConsumer, der Events empfängt. Konfiguriere Kafka in application.yml.
Ein laufender Kafka-Broker wird nicht benötigt - es reicht eine Skizze mit den richtigen Annotationen und Konfigurationen.