Java-SDK: Separierung von Submission Payload und Client Builder
Warum?
Als Nutzer des SDK möchte ich die hochzuladenden Daten in einem FluentBuilder konstruieren und diese im anschluss über den SenderClient des SDK zum Zustelldienst hochladen.
Aktuell sind diese beiden Schritte vermischt. Dies kann durch Speichern eines shared state potenziell zu Multithread-Issues führen.
Beispiel:
var client = ClientFactory.senderClient(config);
IntStream.range(1, 5).forEach(i -> {
client.newSubmission()
.newSubmission()
.withJsonData("{ \"foo\" : \"bar\"}")
.withDestination(UUID.fromString("d2d43892-9d9c-4630-980a-5af341179b14"))
.withServiceType("TestService", "Führerscheinbeantragung", "urn:de:fim:leika:leistung:99400048079000")
.submit();
});
Im Fluent-Step new Submission()
und withJsonData(...)
werden bspw. Daten für jeden Aufruf im Client gespeichert. Dies führt bei mehreren Threads zur Notwendigkeit der Synchonisierung der Zugriffe.
Besser Aufruf:
Ein Trennung von Payload Konstruktion der Konstruktion des Clients würde eine Vermischung der beiden Builderkonzepte vermeiden und ein Absenden von Immutable Objekten ermöglichen.
var submission = SubmissionBuilder.Builder()
.withJsonData("{ \"foo\" : \"bar\"}")
.withDestination(UUID.fromString("d2d43892-9d9c-4630-980a-5af341179b14"))
.withServiceType("TestService", "Führerscheinbeantragung", "urn:de:fim:leika:leistung:99400048079000")
.build();
ClientFactory.senderClient(config).submit(submission);
Relevante Links und Bemerkungen
Die Änderungen Betreffen die beiden Clients dev.fitko.fitconnect.client.SenderClient
und dev.fitko.fitconnect.client.SubscriberClient
, sowie die zugehörigen Step Interfaces in dev.fitko.fitconnect.client.steps
Akzeptanzkriterien
-
Setzen der Submission-Daten für neue Submissions und bereits verschlüsselte Submission Daten wird je über einen separaten Builder ermöglicht -
SenderClient hat eine submit(submission)
Methode zum senden einer immutable Submission -
Neuer PayloadBuilder enthält keinerlei Logik und setzt nur Daten -
(diskutieren) Der Subscriber unterstützt async/await
Durchführungsplan (von Entwickler:in bei Umsetzungsplanung auszufüllen)
-
... -
... -
... -
Definition of Done wurde geprüft