Verschiedene entities für gleichen Code….

Thallius

Top Contributor
die Überschrift ist vielleicht etwas verwirrend. Also muss ich weiter ausholen.

Die Firma für dich ich mehrere Apps erstellt habe stellt nun ihr CMS um auf Service Max. Ich habe nun die aufgabe mein Interface zum CMS an SMax anzupassen. Erstmal soweit kein Problem. Im Prinzip gibt es eine API der ich die Daten in Form von JSON Objekten übergebe. Diese sind relativ komplex Da viele Werte übergeben werden. ich habe nun also z.b. eine Klasse Case erstellt, welche Attribute enthält, welche den benötigen Werten entspricht.
um nun einen Case in SMax zu erzeugen erzeuge ich eine Instanz der Klasse Case, fülle sie mit den daten, erzeuge mit einem object wrapper daraus einen JSON String und verschicke ihn an die API.
Das funktioniert auf dem Test-Server einwandfrei. Nun stehen wir unmittelbar vor der Release und wir haben den Prod-Server bekommen.
Also normalerweise einfach nur API URL, credentials etc ändern und alles fertig….

Aber da habe ich die Rechnung ohne unsere globale IT gemacht. Fragt mich nicht was die sich dabei gedacht haben aber tatsächlich werden einige Attribute plötzlich nicht mehr benötigt, bzw. es gibt sie gar nicht mehr. Andere wiederum heißen plötzlich anders…..

ich muss nun also theoretisch unterschiedlich Klassen für unterschiedliche Server haben. Klar kann man machen. Hat man halt zwei unterschiedliche interfaces in ein und dem selben Code. Aber irgendwie widerstrebt mir das.

ich fände es schöner, wenn ich beim Build einfach entweder die einen oder die anderen Klassen ins .jar linke. Ist da die einzige Möglichkeit das ich die Klassen in ein jeweils eigenes Framework packe und je nach Build mit maven unterschiedliche .jar Abhängigkeiten einbinde? Oder habt ihr noch eine Idee wie man das machen kann ohne mehrere „Projekte“ daraus machen zu müssen, so dass es im Endeffekt ein Repository mit einer maven Datei bleibt?
 
K

kneitzel

Gast
Also ich würde erst einmal zumindest darauf hinweisen, dass das Test System so absolut wertlos ist. Eigentlich bei allen Tests kann es sein, dass es in Produktion Probleme gibt.

Aber generell würde ich mir hier überlegen, wie man das kapseln kann. Ich denke da immer gerne an kleine Web Services, die da als Wrapper dienen. Damit hast Du einmal eine saubere API für Dich definiert, die Du dann ansprechen kannst. Fehler sind dann in einem (hoffentlich nicht zu komplexen) Bereich, die dann hoffentlich auch in Produktion schnell "getestet" sind. Hintergrund hier ist halt auch die Erfahrung, dass so Dinge dann auch gerne von Anderen benutzt werden - saubere Schnittstellen lieben ja alle :)

Wenn ein eigener Web Service dafür nicht gewünscht ist, dann wäre das aber dennoch vom eigentlichen Projekt abgekapselt. Alleine schon um sicher zu gehen, was für Änderungen da ungetestet in Produktion gehen (weil ja Test unterschiedlich ist!)
Und auf unterschiedliche Server zugreifen - da sehe ich direkt Parallelen: JDBC. Da würde ich das 1:1 aufbauen. Also auch mit den entsprechenden Services. Dann kann da die korrekte jar Datei in den Classpath gelegt werden und schon funktioniert der Zugriff.
 
K

kneitzel

Gast
Was funktionieren sollte:
1. https://www.baeldung.com/maven-project-multiple-src-directories
2. Und das mit Profiles steuern.
Wie sind da Deine Erfahrungen? Ich hätte da Bauchschmerzen, einen Build in Produktion zu geben, den ich nicht getestet habe. Ein (komplett) anderer Build war im Test. Da waren halt nur irgendwelche Source Pfade und natürlich die meisten Projekt Settings gleich. Oder ist das eine Form der Paranoia von jemandem, der in einem Projekt arbeitet, wo nichts raus geht, wo eben nicht ein Wochenende lang extrem viele Regression Tests (auf Production Like Systemen - also 1:1 gleiche Software Versionen und so) durchgelaufen sind. Und die Probleme, die selbst kleine Änderungen mit sich bringen bei z.B. Datenbank Updates / Fixes mit auftreten können ...)
 

Thallius

Top Contributor
Also ich würde erst einmal zumindest darauf hinweisen, dass das Test System so absolut wertlos ist. Eigentlich bei allen Tests kann es sein, dass es in Produktion Probleme gibt.

Tja, so ist das halt wenn die individuellen Anpassungen des CMS an die Firma von einem Team aus Projektleitern und jede Menge Indern gemacht wird… Die Release wurde jetzt schon insgesammt um knapp 2 Jahre verschoben und das Management hat jetzt langsam die Schauze voll also muss es fertig werden. Und da jede Änderung ja eine Riesen Rattenschwanz von, erstmal definieren, dann ausformulieren, dann pflichtenheft für den Inder schreiben, dann programmieren, dann Tests schreiben, dann testen und dann ab in die QC hinter sich herzieht dauert jede Änderung um die 3 Monate.…

Aber generell würde ich mir hier überlegen, wie man das kapseln kann. Ich denke da immer gerne an kleine Web Services, die da als Wrapper dienen. Damit hast Du einmal eine saubere API für Dich definiert, die Du dann ansprechen kannst. Fehler sind dann in einem (hoffentlich nicht zu komplexen) Bereich, die dann hoffentlich auch in Produktion schnell "getestet" sind. Hintergrund hier ist halt auch die Erfahrung, dass so Dinge dann auch gerne von Anderen benutzt werden - saubere Schnittstellen lieben ja alle :)

Ist halt auch wieder ein Frage des Verwaltungaufwandes. Für jede neue „eigenständige“ Applikation (und das wäre ein eigener webservice ja dann) muss ein eigener server angefordert, installiert, bezahlt und gewartet werden. Jede App muss angemeldet werden, muss durch die Cyber Security Tests Validiert werden wegen ISO27001 etc etc….

Wenn ein eigener Web Service dafür nicht gewünscht ist, dann wäre das aber dennoch vom eigentlichen Projekt abgekapselt. Alleine schon um sicher zu gehen, was für Änderungen da ungetestet in Produktion gehen (weil ja Test unterschiedlich ist!)
Und auf unterschiedliche Server zugreifen - da sehe ich direkt Parallelen: JDBC. Da würde ich das 1:1 aufbauen. Also auch mit den entsprechenden Services. Dann kann da die korrekte jar Datei in den Classpath gelegt werden und schon funktioniert der Zugriff.

In Mihe seiner Lösung wäre es halt auf Sourcecode Ebene gekapselt was ich eigentlich ok finde.
 

Thallius

Top Contributor
Wie sind da Deine Erfahrungen? Ich hätte da Bauchschmerzen, einen Build in Produktion zu geben, den ich nicht getestet habe. Ein (komplett) anderer Build war im Test. Da waren halt nur irgendwelche Source Pfade und natürlich die meisten Projekt Settings gleich. Oder ist das eine Form der Paranoia von jemandem, der in einem Projekt arbeitet, wo nichts raus geht, wo eben nicht ein Wochenende lang extrem viele Regression Tests (auf Production Like Systemen - also 1:1 gleiche Software Versionen und so) durchgelaufen sind. Und die Probleme, die selbst kleine Änderungen mit sich bringen bei z.B. Datenbank Updates / Fixes mit auftreten können ...)

da bin ich deutlich schmetzbefreiter. Ich definiere vor einem deploy immer den worse case Und kann daraus das Risiko abschätzen.
in diesem Fall wäre der worse case. Dass das erstellen der cases z.b. fehlschlagen würde Was aber direkt dem User mit einem Fehler quittiert würde. Mehr als das der User unglücklich ist das es nicht geklappt hat kann aber nicht passieren :)
 

mihe7

Top Contributor
Wie sind da Deine Erfahrungen?
Ich habe mit 1. gar keine Erfahrungen, sondern - da in Maven ja Convention over Configuration gilt - mir gedacht, dass es ja eine Möglichkeit geben wird, mehrere Source-Dirs anzugeben -> Google -> Baeldung.

Mit 2. habe ich durchaus Erfahrungen - im Zusammenhang mit Libs, Plugins und CI. Das funktioniert sehr gut.
 

mrBrown

Super-Moderator
Mitarbeiter
Was ist denn der Test-Server für ein Server? Auch von der zentralen IT bereit gestellt und muss die gleichen Anforderungen erfüllen wie jeder andere Anwendung oder sind die dort lascher?
Dann könnte man dort u.U. die gleiche API bereitstellen, die der Prod-Server bietet.


Tests gegen extra Code-Basis laufen zu lassen bringt im wesentlichen halt gar nichts und ist im Worst-Case nur negativ. Da kann man meinst besser einfach drauf verzichten.
Wenn man da wirklich keine Möglichkeit hat, die APIs anzugleichen, würde ich nur den gemeinsamen Teil testen und es soweit abstrahieren, dass der nicht-getestete Code auf ein Minimum reduziert ist. Interfaces für beide APIs wäre ein eine Möglichkeit, dass umzusetzen.

Getrennte Sourcen für test und Prod bringt eigentlich nur Nachteile und sollte immer vermieden werden...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Verschiedene Versionen mit Datenbanken Allgemeine Java-Themen 3
OnDemand Zentrale "Drehscheibe" für verschiedene APIs Allgemeine Java-Themen 14
M verschiedene Dokumente auslesen Allgemeine Java-Themen 1
MiMa Logging mit log4j2 in verschiedene Dateien? Allgemeine Java-Themen 22
J Verschiedene Runtime Versionen gleichzeitig? Allgemeine Java-Themen 12
H Klassen LibGDX - Verschiedene Klassen als Value in einer Map Allgemeine Java-Themen 8
P mehrer Verschiedene Objekte in einer Klasse erstellen. Allgemeine Java-Themen 4
K Verschiedene Sprachen Allgemeine Java-Themen 1
C -Verschiedene Versionen eines Programms verwalten Allgemeine Java-Themen 7
M Verschiedene Pilzartenerkennung Allgemeine Java-Themen 0
I Verschiedene Arrays auslesen Allgemeine Java-Themen 6
nrg Verschiedene JREs im Browser konfigurieren Allgemeine Java-Themen 6
S Best Practice verschiedene Exceptions fangen und neue Exception erzeugen Allgemeine Java-Themen 11
G DesignPattern Verschiedene Services Allgemeine Java-Themen 4
B Verschiedene Objekte in Abhängigkeit eines Typs instanziieren. Allgemeine Java-Themen 17
M massenhaft verschiedene Date-Pattern Allgemeine Java-Themen 3
R Eclipse Verschiedene Ergebnisse bei Berechnung eines double-Werts Allgemeine Java-Themen 5
R Implementierung eines Interface durch 2 verschiedene Klassen Allgemeine Java-Themen 6
faetzminator verschiedene Beans, verschiedene Felder "koppeln" Allgemeine Java-Themen 3
J Verschiedene Klassen als "Object" in ArrayList und dann in for-Schleife erzeugen!? Allgemeine Java-Themen 2
S Welche Datenstruktur für verschiedene Sprachen sinnvoll? Allgemeine Java-Themen 2
H Zwei verschiedene Dateien mittels einem Binärstream übertragen? Allgemeine Java-Themen 13
M verschiedene Methonden innerhalb des gleichen Threads Allgemeine Java-Themen 7
N verschiedene Klasse laden (Designfrage) Allgemeine Java-Themen 2
S Package in verschiedene Projekten einbinden? Allgemeine Java-Themen 3
D Verschiedene Datein aus einer Zip Datei ins Programm laden Allgemeine Java-Themen 4
D Verschiedene Persistenz Strategien Allgemeine Java-Themen 7
S Konstruktoren, verschiedene Klassen, Methoden. Allgemeine Java-Themen 3
M Verschiedene Modi bei AbstractTableModel Allgemeine Java-Themen 10
J Verschiedene Klassen, verschiedene Ströme? Allgemeine Java-Themen 6
V 1 Methode für viele verschiedene Klassen? Allgemeine Java-Themen 9
L Verschiedene Versionen eines Interfaces Allgemeine Java-Themen 12
J Verschiedene Starteinstellungen Allgemeine Java-Themen 7
J Programm für verschiedene Betriebssystem vertreiben? Allgemeine Java-Themen 10
M 2 verschiedene LookAndFeels in einem Fenster möglich? Allgemeine Java-Themen 6
D Gehts praktischer? Thema:Verschiedene Instanzen einer Klasse Allgemeine Java-Themen 3
C Verschiedene JDKs Allgemeine Java-Themen 6
M Regular Expression - verschiedene Ausdrücke testen (grep | ) Allgemeine Java-Themen 5
C verschiedene Klassenarten Allgemeine Java-Themen 3
G Verschiedene Auflösungen Allgemeine Java-Themen 6
H verschiedene Java Versionen Allgemeine Java-Themen 3
A Textfeld soll verschiedene Datumseingaben akzeptieren Allgemeine Java-Themen 5
S Entities aus XML - Daten. Allgemeine Java-Themen 1
W Doclet mit classDoc&Entities Allgemeine Java-Themen 0
Karl_Der_Nette_Anfänger Hat wer ne Lösung für verknüpfte Postleitzahlen? (Baum/Wurzel Struktur) Allgemeine Java-Themen 11
R 11 GB File lesen ohne zu extrahieren Filedaten Bereich für Bereich adressieren dann mit Multi-Thread id die DB importieren Allgemeine Java-Themen 3
G KeyListener für JTextField Allgemeine Java-Themen 5
webracer999 Library für Textsuche (z. B. include/exclude, and/or)? Allgemeine Java-Themen 5
I Module-Info für Jar erzeugen Allgemeine Java-Themen 7
krgewb Java-Bibliothek für ONVIF Allgemeine Java-Themen 1
B Simpler Eventlistener für Tastaturtaste bauen? Allgemeine Java-Themen 13
_user_q Eingegebenen Text Zeile für Zeile ausgeben lassen Allgemeine Java-Themen 11
E Key für TOTP Algorythmus(Google Authentificator) Allgemeine Java-Themen 0
S Formel für Sonnenwinkel in ein Programm überführen Allgemeine Java-Themen 11
M pfx-Zertifikat in Tomcat für SSL-Verschlüsselung nutzen Allgemeine Java-Themen 14
R Best Practice Erfahrungswerte für eine Migration von JSF nach Angular (oder anderes JS-Framework) Allgemeine Java-Themen 1
B HeapSort für Array of Strings funktioniert nur teilweise Allgemeine Java-Themen 3
jhCDtGVjcZGcfzug Klassen Was genau passiert hier? Kann mir das jemand bitte Zeile für Zeile erklären? Allgemeine Java-Themen 1
rosima26 Bester Sortieralgorithmus für kurze Arrays Allgemeine Java-Themen 40
S Mit Methoden kann man definieren für was <T> steht. Geht das auch irgendwie für Variablen? Allgemeine Java-Themen 12
MangoTango Operatoren while-Schleife für Potenz Allgemeine Java-Themen 3
B Lottospiel, genug Reihen tippen für 3 Richtige (Spaß mit Arrays)? Allgemeine Java-Themen 46
B Mit welchen Datentypen und Strukturierung am Besten dutzende Baccaratspiele Shcritt für Schritt durchsimulieren? Allgemeine Java-Themen 26
D Klassendesign für einen Pascal Interpreter Allgemeine Java-Themen 6
I OCR Library für Belegerkennung Allgemeine Java-Themen 7
farah GetterMathod für Farbkanäle Allgemeine Java-Themen 6
B Welcher Datentyp für sehr große Zahlenbereiche? Allgemeine Java-Themen 1
S Webservices für binäre Daten? Allgemeine Java-Themen 5
G Licence-Header für InHouse entwickelten Source Allgemeine Java-Themen 8
M Schleife für einen TicTacToe Computer Allgemeine Java-Themen 5
O git ignore für Intellji braucht es die .idea Dateien? Allgemeine Java-Themen 8
F Java Script für das Vorhaben das richtige? Allgemeine Java-Themen 9
M wiviel Java muss ich für die Berufswelt können ? Allgemeine Java-Themen 5
Robertop Datumsformat für GB ab Java 16 Allgemeine Java-Themen 1
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
D SHA-3 für Java-version 1.8 Allgemeine Java-Themen 1
N Validator für einen SQL-Befehl Allgemeine Java-Themen 22
Muatasem Hammud Erstellung von Testdaten für Arrays Allgemeine Java-Themen 6
B Logikfehlersuche, das perfekte Lottosystem für 3 Richtige mit Arraylists? Allgemeine Java-Themen 61
G Methoden für die Zukunft sinnvoll? Allgemeine Java-Themen 4
M API für PLZ Umkreissuche Allgemeine Java-Themen 3
1Spinne JDK 8 für Eclipse installieren Allgemeine Java-Themen 5
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
L Methoden Parser für gängige Datumsformate? Allgemeine Java-Themen 1
H Interface PluginSystem ClassNotFound exception für library Klassen Allgemeine Java-Themen 10
N relativier Pfad für sqlite-Datenbank in Gradle/IntelliJ Allgemeine Java-Themen 2
buchfrau Anagram für beliebiges Wort Allgemeine Java-Themen 2
TonioTec Api für Datenaustausch zwischen Client und Server Allgemeine Java-Themen 0
W Suche Ursache für NPE - woher kommt sie? (Hilfe beim Debugging) Allgemeine Java-Themen 19
Kirby.exe Distanz Map für die Distanztransformation erstellen Allgemeine Java-Themen 1
F PI Regler für Heizung Allgemeine Java-Themen 7
8u3631984 Generelle Log4j.xml für alle Module Allgemeine Java-Themen 5
M Wie übergebe ich den Zähler für die Anzahl Rekursionsschritte korrekt? Allgemeine Java-Themen 2
B Login für User, der im Hintergrund Schedules ausführt Allgemeine Java-Themen 16
L RegEx für Teile einer Berechnung Allgemeine Java-Themen 14
S Java-Task-Management-Tool für Windows und Mac selber programmieren Allgemeine Java-Themen 4
M Java 2D Array für ein Grid erstellen ? Allgemeine Java-Themen 2
Z Welches GUI Framework für Java ist aktuell? Allgemeine Java-Themen 16
N Convert.FromBase64 von C# für Java Allgemeine Java-Themen 11

Ähnliche Java Themen

Neue Themen


Oben