Zugriff auf PreferenceStore aus der Business-Logik-Schicht?

Status
Nicht offen für weitere Antworten.

Olel

Mitglied
Hallo zusammen,

ich habe für meine Anwendung einen PreferenceDialog gebaut, um die zentralen Properties für den User konfigurierbar zu machen.

Nun möchte ich auf diese Werte teilweise in der Business-Logik-Schicht zugreifen. Wie kann ich das sinnvoll machen? Die Klassen PreferenceStore usw. liegen ja im Paket "org.eclipse.jface.preference", und darauf will ich natürlich nicht aus meiner BL referenzieren. Stehe ich auf dem Schlauch? Es muss da doch eigentlich eine "Standard-Lösung" geben.

Gruß,
Ole
 

Olel

Mitglied
Hmm, schöne Idee, aber meine Anwendung ist keine RCP (OSGi)-Anwendung, sondern eine "normale" SWT/JFace Anwendung.

Da kann ich den OSGi PreferencesService dann nicht verwenden, oder?

Aber es muss doch auch eine andere Möglichkeit geben. Ich meine, die JFace-Entwickler werden sich doch auch gedacht haben, dass man die Settings, die man in der GUI-Schicht einstellt, nicht nur dort sondern auch in der Business-Logik braucht.
 

Wildcard

Top Contributor
Hmm, ach so.... Dann habe ich das falsch verschoben.
Die JFace Entwickler haben mit Business Logik nichts am Hut, denn es ist eine grafische Bibliothek. In diesem Fall fehlt dir ganz einfach das passende Backend, denn JFace bezieht sich immer nur auf die UI. Ist ja kein Anwendungsframework.
 

Olel

Mitglied
Dann verschieb's doch bitte mal zurück ;-)

Ja, schon klar, dass JFace nur eine Grafik-Bibliothek ist, aber dennoch muss der Sinn so eines Frameworks, bei dem ein PreferenceStore angeboten wird doch sein, dass man diese Preferences dann auch im Backend nutzen kann...
 

Wildcard

Top Contributor
Ein JFace Properties Store verwendet intern ein java.util.Properties Objekt. Mach dir doch einfach ein eigenes Interface das ohne JFace Referenzen auskommt.
Falls deine GUI einen IPreferencesStore benötigt, kannst du doch einen Wrapper um dieses Objekt schreiben das IPreferencesStore implementiert.
 

Olel

Mitglied
Gut, das wäre wohl eine Möglichkeit. Aber dann schreibe ich im Grunde eine eigene Implementation. Kann doch eigentlich nicht die beste Lösung sein.
Ich kann einfach nicht glauben, dass die JFace-Entwickler dieses Problem nicht bedacht und gelöst haben.
 

Wildcard

Top Contributor
Was meinst du mit Bedacht? Die Klasse braucht ja keine GUI. Wenn du an dieser Stelle keine Abhängigkeit auf die JFace.jar willst, kannst du eben keine JFace Klasse durchreichen, so ist das eben. Wenn dich die Abhängigkeit nicht stört, kannst du die Klasse auch in deiner Business Logik verwenden.
Ist doch sowieso nichts anderes als ein aufgemotztes Properties Objekt
 

Olel

Mitglied
Du siehst mich jetzt ehrlich gesagt schon ziemlich überrascht. Du schreibst, die Klasse ((I)PreferenceStore) brauche keine GUI. Das ist nur die halbe Wahrheit. Dadurch, dass sie (natürlich) im package "org.eclipse.jface.preference" liegt, hat sie eine Abhängigkeit zu einem GUI-Framework. Jetzt kannst du natürlich sagen, dass man die Klasse einfach an die Business Logik durchreichen kann, aber damit schaffe ich eine Abhängigkeit der BL zu einem GUI-Framework und das geht nun mal gar nicht! Ist doch eine der ersten Regeln der Softwarearchitektur, dass es keine Abhängigkeiten von einer Schicht auf eine darüber liegende Schicht geben darf (Backend -> Business Logik, BL -> GUI).
Stell Dir vor, die GUI soll mal ausgestauscht werden oder es soll ein Web-Frontend für die Applikation entwickelt werden. Das wäre dann nicht möglich ohne die BL mit zu verändern.

Ich bleibe also weiterhin auf der Suche nach einer besseren Lösung. Hat vielleicht irgendjemand noch eine Idee?
 

Wildcard

Top Contributor
Das ist doch genau was ich gesagt habe. Du kannst die Klasse durchreichen, wenn du bereit bist dir Dependency zu akzeptieren. Wenn nicht, dann darfst du es eben nicht.
Ich kann einfach nicht glauben, dass die JFace-Entwickler dieses Problem nicht bedacht und gelöst haben.
Wie soll denn JFace eine Lösung dafür finden das du JFace nicht verwenden willst? Ist doch irgendwo widersinnig.
Jetzt nochmal, was stört dich daran einen entsprechenden Decorator der das JFace Interface implementiert über ein Backend deiner Wahl (java.util.Preference/Properties,...) zu legen?
Dürften so ziemlich genau 10 Minuten Arbeit sein und ist eine vollkommen legitime und vor allem saubere Lösung.
 

Olel

Mitglied
Wildcard hat gesagt.:
Das ist doch genau was ich gesagt habe. Du kannst die Klasse durchreichen, wenn du bereit bist dir Dependency zu akzeptieren. Wenn nicht, dann darfst du es eben nicht.

Ok, so eine Abhängigkeit kann ich nicht akzeptieren und das sollte auch niemand anderes können. Deshalb ist das aus meiner Sicht kein (sinnvoller) Lösungsansatz.

Wildcard hat gesagt.:
Wie soll denn JFace eine Lösung dafür finden das du JFace nicht verwenden willst? Ist doch irgendwo widersinnig.
Man hätte es z.B. so implementieren können, dass ein PreferenceStore ein java.util.Properties-Objekt entgegen nimmt und dafür sorgt, dass dieses synchron zum PreferenceStore gehalten wird bzw. einfach eine Möglichkeit anbieten können von außen auf das Properties-Objekt (welches im Hintergrund ja eh verwendet wird) zuzugreifen.

Wildcard hat gesagt.:
Jetzt nochmal, was stört dich daran einen entsprechenden Decorator der das JFace Interface implementiert über ein Backend deiner Wahl (java.util.Preference/Properties,...) zu legen?
Dürften so ziemlich genau 10 Minuten Arbeit sein und ist eine vollkommen legitime und vor allem saubere Lösung.

Was mich daran stört? Das ich eine neue Implementierung des PreferenceStore schreiben muss. Das halte ich für absolut nicht sauber und zudem auch für erheblich mehr Aufwand als 10 Minuten. Hast Du mal geschaut, wie viele Methoden das Interface IPreferenceStore definiert? Der entscheidende Punkt ist aber, dass ich wie gesagt eine Implementierung schreibe, die es im Grunde schon gibt; inklusive Default-, Default-Default-Behanldung und Speichern etc.
 

Wildcard

Top Contributor
Man hätte es z.B. so implementieren können, dass ein PreferenceStore ein java.util.Properties-Objekt entgegen nimmt und dafür sorgt, dass dieses synchron zum PreferenceStore gehalten wird bzw. einfach eine Möglichkeit anbieten können von außen auf das Properties-Objekt (welches im Hintergrund ja eh verwendet wird) zuzugreifen.
Das geht nicht, da der PreferenceStore PropertyChangeSupport anbietet. Wenn du das Properties Objekt nach aussen gibst ist es nicht mehr synchron zu den Events.

Olel hat gesagt.:
Was mich daran stört? Das ich eine neue Implementierung des PreferenceStore schreiben muss. Das halte ich für absolut nicht sauber
Natürlich ist das sauber, daher auch das Interface. PreferenceStore ist eine Default Implementierung.

und zudem auch für erheblich mehr Aufwand als 10 Minuten. Hast Du mal geschaut, wie viele Methoden das Interface IPreferenceStore definiert?
Das sind doch alles Einzeiler.
Der entscheidende Punkt ist aber, dass ich wie gesagt eine Implementierung schreibe, die es im Grunde schon gibt; inklusive Default-, Default-Default-Behanldung und Speichern etc.
Es gibt eine Default Implementierung, die aber nicht deinen Ansprüchen genügt, da du die Klasse nicht verwenden kannst ohne JFace.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P JavaFX Zugriff auf Fenster/Layout-Container in eigenen Klassen AWT, Swing, JavaFX & SWT 5
J JavaFX JavaFX Splitpane - Zugriff auf die Controller der Elemente AWT, Swing, JavaFX & SWT 8
karlmasutra JavaFX Zugriff auf eine erzeugte Scene aus einer anderen Klasse AWT, Swing, JavaFX & SWT 1
L JavaFX Zugriff auf HostServices im FXML Controller AWT, Swing, JavaFX & SWT 1
K JTable in extra Klasse, Zugriff in einer anderen klasse nicht möglich AWT, Swing, JavaFX & SWT 26
J JavaFX Zugriff auf Child AWT, Swing, JavaFX & SWT 4
J JavaFX Zugriff auf FXML-Variablen eines anderen Controllers AWT, Swing, JavaFX & SWT 2
C JavaFX Zugriff auf TextField aus einer anderen Klasse AWT, Swing, JavaFX & SWT 4
wolfgang63 JavaFX Zugriff auf Guiobjekte die über FXML erstellt wurden AWT, Swing, JavaFX & SWT 2
F JavaFX Zugriff auf Controller Methode von einer normalen Klasse aus AWT, Swing, JavaFX & SWT 4
C JavaFX Zugriff auf TableView AWT, Swing, JavaFX & SWT 2
D JavaFX Zugriff auf Controller erlangen AWT, Swing, JavaFX & SWT 4
L Zugriff auf JavaFX Controls AWT, Swing, JavaFX & SWT 3
G JavaFX NullPointerException bei Zugriff auf FXML Element AWT, Swing, JavaFX & SWT 0
P Event Handling Anfängerfrage: ActionEvent bekommt kein Zugriff auf Objekt AWT, Swing, JavaFX & SWT 3
H SWT NullPointerException bei Zugriff auf Variablen des Hauptfensters AWT, Swing, JavaFX & SWT 6
K Zugriff auf Label und Ereignisbehandlung durch zwei Handlerklassen AWT, Swing, JavaFX & SWT 3
B Zugriff auf JFrame obwohl die Klasse abgeleitet ist AWT, Swing, JavaFX & SWT 3
V JTable: Zugriff auf einzelne Zellen AWT, Swing, JavaFX & SWT 4
L Swing ActionListener zugriff auf bestimmte Elemente AWT, Swing, JavaFX & SWT 3
A Swing Zugriff auf JButton AWT, Swing, JavaFX & SWT 2
M Zugriff auf Variablen eines Objektes ohne sie auf static zu setzen AWT, Swing, JavaFX & SWT 9
I Swing Zugriff auf ein Objekt AWT, Swing, JavaFX & SWT 2
M Zugriff paralleler Threads auf selbes JTextPane AWT, Swing, JavaFX & SWT 6
M JTree mit eigenen Knoten - Zugriff auf Daten AWT, Swing, JavaFX & SWT 6
N zugriff auf frame AWT, Swing, JavaFX & SWT 5
N Swing Zugriff JButton auf JTree AWT, Swing, JavaFX & SWT 4
D Zugriff auf Instanz der GUI AWT, Swing, JavaFX & SWT 3
E Swing DB Zugriff mit JProgressBar?! AWT, Swing, JavaFX & SWT 8
R Zugriff auf Model im MVC-Design aus SwingWorker heraus AWT, Swing, JavaFX & SWT 3
H Zugriff JPanel AWT, Swing, JavaFX & SWT 3
D Swing Storage von / Zugriff auf und durch Actions AWT, Swing, JavaFX & SWT 5
S this-Zugriff auf Container höherer Ebene AWT, Swing, JavaFX & SWT 2
S Swing Zugriff auf Polyline in Grafik AWT, Swing, JavaFX & SWT 4
E Swing Zugriff auf Attribute eines JFrames über einen JDialog AWT, Swing, JavaFX & SWT 2
J Zugriff auf HtmlPanel sperren AWT, Swing, JavaFX & SWT 3
D JTree - Zugriff auf Nodes mit Object AWT, Swing, JavaFX & SWT 6
R Zugriff auf Component um addComponentListener() aufzurufen AWT, Swing, JavaFX & SWT 4
S NumberFormatException beim Zugriff auf Leeres JTextField AWT, Swing, JavaFX & SWT 8
S Zugriff auf statische Var in MouseEvent -> Warnung AWT, Swing, JavaFX & SWT 6
M Fehler beim Zugriff von awt-KeyListener auf swt-Shell AWT, Swing, JavaFX & SWT 2
S Zugriff auf Elemente funktioniert mit SWING nicht mehr AWT, Swing, JavaFX & SWT 5
X Zugriff auf "Oberparents" ? AWT, Swing, JavaFX & SWT 4
J JTextArea wird nicht aktualisiert bei Zugriff von außerhalb AWT, Swing, JavaFX & SWT 2
O DB-Zugriff + wie darstellen? AWT, Swing, JavaFX & SWT 6
F Problem bei Zugriff auf ComboBox Item AWT, Swing, JavaFX & SWT 4
G Zugriff auf JTextField AWT, Swing, JavaFX & SWT 2
J Zugriff auf "dynamisch erzeugte" JTextFields AWT, Swing, JavaFX & SWT 2
J Zugriff auf letzte Klasse AWT, Swing, JavaFX & SWT 4
M Zugriff auf Methoden aus einem ActionListener AWT, Swing, JavaFX & SWT 2
F Zugriff auf Oberfläche bzw Trennung GUI / Logik AWT, Swing, JavaFX & SWT 3
I selectedText: Wie bekomme ich Zugriff auf den Text? AWT, Swing, JavaFX & SWT 4
G Zugriff auf Bilder verweigern AWT, Swing, JavaFX & SWT 7
H Zugriff auf die Farbwerte eines Bildes AWT, Swing, JavaFX & SWT 6
G Zugriff auf TextField geht nicht AWT, Swing, JavaFX & SWT 5
G zugriff auf benutzeroberflächenelemente AWT, Swing, JavaFX & SWT 4
V Zugriff auf Components aus einem ActionListener AWT, Swing, JavaFX & SWT 3
M ActionListener-Zugriff durch mehrere Frames AWT, Swing, JavaFX & SWT 5
M Zugriff auf ComboBox! AWT, Swing, JavaFX & SWT 17
G Excel-Zugriff über POI: wohin mit dem Package? AWT, Swing, JavaFX & SWT 4
B Zugriff von Toolbar auf zugehörigen Frame AWT, Swing, JavaFX & SWT 6
O JTabbedPane - Zugriff auf die Elemente eines Tabs AWT, Swing, JavaFX & SWT 4
O JFileChooser - Zugriff auf Dateiname-Feld und Save-Button? AWT, Swing, JavaFX & SWT 6
E Zugriff auf JTextField nach Buttonklick AWT, Swing, JavaFX & SWT 6
M LookAndFeel Oberfläche wie Eclipse/Business Objects oder Solvatio AWT, Swing, JavaFX & SWT 2
G GUI Validierung und Business Rules AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben