Singleton oder Controller / Datenverwaltungsklasse?

Status
Nicht offen für weitere Antworten.

Antoras

Top Contributor
Hallo,

folgendes Problem:

Ich besitze beispielsweise eine Klasse Person mit folgendem skizzenmäßigen Aufbau:
Java:
public class Person {
	
	private String firstName = null;
	private String lastName = null;
	
	public String getFirstName() {
		return firstName;
	}
	
	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}
	
	public String getLastName() {
		return lastName;
	}
	
	public void setLastName(String lastName) {
		this.lastName = lastName;
	}
}

Nun möchte ich Person mit Daten befüllen, was von einer Klasse erledigt wird. Eine Zweite Klasse soll später die gespeicherten Daten lesen. Nun habe ich aber noch eine dritte Klasse, die die Daten u.U. manipulieren muss.
Mit einem Singleton geht das ja relativ einfach - da ich immer nur eine Instanz der Klasse besitze. Bei einem Controller ist dies ebenfalls der Fall - alle Requests werden an selbigen gerichtet, der dann auf die Klasse Person zugreift. Mich stört jetzt aber, dass ich jedes Mal einen zusätzlichen Request brauche, nämlich im Controller, um auf Person zugreifen zu können. Und Singletons wollte ich nicht benutzen, da sie nicht gerade das beste objektorientierte Stilmittel sind.

Aber vielleicht sind diese in diesem Fall ja sinnvoller als ein Conrtoller bzw. als eine Datenverwaltungsklasse, die als eine Art Schnittstelle zwischen den Klassen fungiert.

Ich bräuchte jetzt einen Rat was ich verwenden soll, da könnt ihr mir ja bestimmt weiterhelfen?
 

HLX

Top Contributor
Welches Pattern Sinn macht, kann man so nicht pauschal sagen. Das hängt vom Anwendungszusammenhang und von den Anforderungen an deine Anwendung ab. Singleton kann z.B. aus Speicherplatz-Gründen vorteilhaft sein.

Du schreibst, dass Klassen auf dein Personenobjekt zugreifen sollen. Da du großen Wert auf Objektorientierung legst, solltest du dich daran gewöhnen in Objekten zu denken und nicht in Klassen ==> Ein oder mehrere Objekte benötigen Zugriff auf die Person.
 
M

maki

Gast
Verstehe nicht ganz wo du ein Singleton bzw. etwas anderes anstatt eines Singletons haben willst.
Die Klasse die auf die DB zugreifen soll?
 

Antoras

Top Contributor
Person soll auf eine DB zugreifen, ja. Ich besitze aber mehrere Klassen bzw., so wie es HLX formuliert hat, Objekte, die auf Person zugreifen sollen. Und alle dieser Objekte befinden sich in unterschiedlichen Klassen. Ich möchte aber mit allen Objekten auf genau die selbe Instanz von Person zugreifen.
Dies geht ja am besten mit einem Singleton bzw mit einem Objekt, das in einer weiteren Klasse untergebracht ist. Und nur dieses Objekt kann auf Person zugreifen. Vereinfachte UML-Schreibweise:
controller_singleton.png


Wobei ich gerade am überlegen bin ob es überhaupt Sinn macht auf immer nur eine Instanz zuzugreifen. Ich möchte beispielsweise erreichen, dass jedes mal wenn ich Daten verändere, dies der GetDataHandler mitbekommt und die Daten beispielsweise auf einem GUI updatet.
Die Hauptfrage ist dann wohl wie ich die Daten hole, also ob es sinnvoller ist die einzelnen Instanzen von Person mit Übergabewerte bei den Methoden zu übergeben, oder eben alle Daten neu abzurufen.
 
M

maki

Gast
Person soll auf eine DB zugreifen, ja.
Würde ich nicht so machen, unabhängig davon ob du Singletons nutzt oder nicht.

Sieh dir mal das Dao Pattern an, so ein Dao könntest du zB. im Controller nutzen um eine Person zu laden, Speichern, löschen, etc. pp.
 

Antoras

Top Contributor
Morgen,
hab mir das DAO-Pattern jetzt angeguckt. Bin aber noch auf ein Problem gestoßen:
dao-pattern.png

DAOFactory ist eine abstrakte Klasse, Database und Chat erben von ihr. Problem sind die Methoden. Die jetzigen passen ja nur für die Database, aber nicht für den Chat. Wie umgehe ich dieses Problem am geschicktesten (Chat soll möglichst ebenfalls von DAOFactory erben, da er ebenfalls Daten empfangen und senden können muss)?

Und noch was: die Klassennamen. Mir persönlich kommt da ein bisschen zu viel DAO vor. Sollte ich das trotzdem so lassen oder würdet ihr denen andere Namen geben?
 
M

maki

Gast
DAOFactory ist eine abstrakte Klasse, Database und Chat erben von ihr
Die abstrakte Factory ist nicht unbedingt notwendig, nur wenn du mehrere DBs hast.
Ansonsten reicht eine konkrete Factory (zB. als Singleton), mit DI kommst du sogar ganz ohne Factory aus, denn diese bräuchstest du ja nur um den Controllern zugriff auf die DAOs zu geben, mit DI (Spring, Juice, etc. pp.) löst du das Problem anders, du "injizierst" einfach die Dao Instanz in die Klassen die sie brauchen über Setter bzw. Konstruktor Parameter ;)
Würde mit an deiner Stelle erstmal auf die Daos konzentrieren und die Factory/Singleton/DI Frage später lösen.

(Chat soll möglichst ebenfalls von DAOFactory erben, da er ebenfalls Daten empfangen und senden können muss)?
Würde ich nicht machen, ein Data Access Object hat meist mit DBs, oder allgemeiner gesagt mit Datenbeständen zu tun, ein Chat ist etwas anderes imho, aber das hast du ja selbst schon rausgefunden:
Problem sind die Methoden. Die jetzigen passen ja nur für die Database, aber nicht für den Chat.
Wenn einem so etwas auffällt sollte man das Design immer überdenken.

Und noch was: die Klassennamen. Mir persönlich kommt da ein bisschen zu viel DAO vor. Sollte ich das trotzdem so lassen oder würdet ihr denen andere Namen geben?
Würde ein Dao auch einen Namen mit Dao geben, kennen die meisten Entwickler und daher wird die Architektur bzw. das Design kommunitziert, ohne extra Doku schreiben zu müssen :)

Würde so eine Vererbungshierarchie empfehlen, exemplarisch:
Interface Dao (allgemeine Methoden, falls welche vorhanden sind)
Interface PersonDao, erbt vom allgemeinen Dao, hat zusätzliche Methoden für Person
(konkrete) Klasse welche PersonDao Implementiert (zB. PersonDaoImpl)

Natürlich kannst du auch eine abstrakte Klasse schreiben welche das allgemeine Dao Interface (teilweise) implementiert und deine konkreten Daos davon erben lassen, gerne auch mit Generics, kommt eben darauf an wie viele Gemeinsamkeiten (Methoden) deine Daos haben.
 

Antoras

Top Contributor
Die abstrakte Factory ist nicht unbedingt notwendig, nur wenn du mehrere DBs hast.
Ok, dann wäre das Problem mit dem Chat aus der Welt geschafft.

Würde mit an deiner Stelle erstmal auf die Daos konzentrieren und die Factory/Singleton/DI Frage später lösen.
Hab mal versucht mich in Spring einzuarbeiten. Bisher ist aber noch nicht wirklich was sinnvolles dabei rausgekommen. Das ist mir irgendwie (noch) zu kompliziert.

Würde so eine Vererbungshierarchie empfehlen, exemplarisch:
Interface Dao (allgemeine Methoden, falls welche vorhanden sind)
Interface PersonDao, erbt vom allgemeinen Dao, hat zusätzliche Methoden für Person
(konkrete) Klasse welche PersonDao Implementiert (zB. PersonDaoImpl)
So hatte ich es ungefähr ja auch.

Hab die DAOFactory jetzt rausgeschmissen. Meine DB kommuniziert jetzt - ohne Umweg - direkt mit dem Controller.
Ich werde die nchste Zeit dal überlegen wie man am besten Chat und Database über eine spezielle Oberklasse zusammenfassen kann. Möchte das deshalb so haben, da beide ja in irgend einer Weise gespeicherte Daten manipulieren. Mal schauen was mir dazu einfällt.
 
M

maki

Gast
Meine DB kommuniziert jetzt - ohne Umweg - direkt mit dem Controller.
Umgekehrt wird ein Schuh daraus, der Controller nutzt die Daos um mit der DB zu kommunizieren.
Hoffe du hast keine Klasse die wirklich Database heisst... es ist die Aufgabe der Daos diese zu abstrahieren.

Hab mal versucht mich in Spring einzuarbeiten. Bisher ist aber noch nicht wirklich was sinnvolles dabei rausgekommen. Das ist mir irgendwie (noch) zu kompliziert.
Das was du von Spring bräuchtest wäre sehr einfach, aber erstmal die Daos & Controller hinbekommen ;)

Möchte das deshalb so haben, da beide ja in irgend einer Weise gespeicherte Daten manipulieren. Mal schauen was mir dazu einfällt.
Nun, alles in der IT manipuliert irgendwie Daten ;)
Denke nicht dass du da viele Gemeinsamkeiten zwischen einem Chat und einer Db finden wirst.
 

Antoras

Top Contributor
Umgekehrt wird ein Schuh daraus, der Controller nutzt die Daos um mit der DB zu kommunizieren.
Hoffe du hast keine Klasse die wirklich Database heisst... es ist die Aufgabe der Daos diese zu abstrahieren.
Ups, ich meinte hier natürlich, dass der Controller mit einer DatabaseFactory kommuniziert. Erst diese kommuniziert mit den DAOs, die dann wiederum mit der DB kommunizieren. ;)

Das was du von Spring bräuchtest wäre sehr einfach, aber erstmal die Daos & Controller hinbekommen ;)
Das ist alles sehr einfach. Man muss es nur einmal gemacht haben...

Nun, alles in der IT manipuliert irgendwie Daten ;)
Denke nicht dass du da viele Gemeinsamkeiten zwischen einem Chat und einer Db finden wirst.
Mal schauen, vllt. finde ich ja doch etwas. Und wenn nicht, dann lass ich es halt so. Man muss ja nicht alles mit Pattern vollstopfen. Mein Code sieht jetzt mal schon deutlich "hochwertiger" aus.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
frager2345 Singleton-Muster Java ->Nur eine Instanz einer Klasse erzeugen können Java Basics - Anfänger-Themen 45
frager2345 Java Singleton Muster -> Methode für Konstruktor mit Parametern Java Basics - Anfänger-Themen 3
J Implementierung von Observer und Singleton-Pattern Java Basics - Anfänger-Themen 9
W Sinn eines Singleton ? Java Basics - Anfänger-Themen 14
O Singleton Java Basics - Anfänger-Themen 5
R Methode in Singleton Klasse Java Basics - Anfänger-Themen 1
O Singleton Verständnis Java Basics - Anfänger-Themen 4
A Klasse,Vererbung,Interface,Singleton,Thread Java Basics - Anfänger-Themen 5
S Singleton (Design Patterns) Java Basics - Anfänger-Themen 16
R OOP Singleton Java Basics - Anfänger-Themen 10
U Vererben von Singleton Java Basics - Anfänger-Themen 17
S Singleton - Daten einspielen Java Basics - Anfänger-Themen 5
K Warum ist ein Singleton kein Best Practise? Java Basics - Anfänger-Themen 3
M Singleton mit Parametern im Konstruktor Java Basics - Anfänger-Themen 18
D Singleton beim JFrame zerstören Java Basics - Anfänger-Themen 4
L Java Serialisierung Singleton Java Basics - Anfänger-Themen 6
A JBoss-Anwendung soll im Singleton-Mode laufen Java Basics - Anfänger-Themen 6
Luk10 Problem mit Singleton bzw statischer Referenz! Java Basics - Anfänger-Themen 16
S Instanz(en) einer Singleton-Klasse Java Basics - Anfänger-Themen 11
S Statische Klassen/ Singleton Java Basics - Anfänger-Themen 13
J Warum verwendet man Singleton? Java Basics - Anfänger-Themen 7
B Was ist der unterschied zwischen Singleton und Strategy? Java Basics - Anfänger-Themen 6
S Singleton lazy Java Basics - Anfänger-Themen 8
A ist das ein Singleton-Pattern? Java Basics - Anfänger-Themen 6
P Singleton-Implementation Java Basics - Anfänger-Themen 8
F singleton Java Basics - Anfänger-Themen 4
T Singleton Java Basics - Anfänger-Themen 13
D Objekte anlegen und Singleton Pattern Java Basics - Anfänger-Themen 21
D Denkfehler Singleton Java Basics - Anfänger-Themen 53
X Singleton - In diesem Fall sinnvoll? Java Basics - Anfänger-Themen 22
S Fragen zu synchronized + Singleton! Java Basics - Anfänger-Themen 10
M Singleton Pattern Java Basics - Anfänger-Themen 35
J Singleton Pattern Java Basics - Anfänger-Themen 5
S Singleton Pattern passend hierfür? Java Basics - Anfänger-Themen 60
M Mp3 Player mit Singleton Java Basics - Anfänger-Themen 8
M GUI als SingleTon Java Basics - Anfänger-Themen 6
B Singleton und Resourcebundle Java Basics - Anfänger-Themen 7
G Singleton Pattern Java Basics - Anfänger-Themen 7
D Singleton in Java implementieren Java Basics - Anfänger-Themen 6
H singleton Synchronisations Problem? Java Basics - Anfänger-Themen 2
M Singleton verwenden, aber wie? Java Basics - Anfänger-Themen 3
H Singleton mit Attributen Java Basics - Anfänger-Themen 7
EchtKeineAhnungManchmal Controller aus FXML Datei entfernen Java Basics - Anfänger-Themen 49
G Model View Controller Java Basics - Anfänger-Themen 7
B Objekt von EJB in Controller (CDI) - Klasse füllen? Java Basics - Anfänger-Themen 3
H Eine befühlte Klasse weiter geben an Controller Java Basics - Anfänger-Themen 12
R Variablen Variable an FXML-Controller übergeben Java Basics - Anfänger-Themen 4
S Model View Controller: Verständnisproblem Java Basics - Anfänger-Themen 13
S Modell View Controller Verständnisfrage Java Basics - Anfänger-Themen 24
N JavaFX - (Controller) - Klasse verkleinern Java Basics - Anfänger-Themen 8
J MVC Pattern, mehrere Controller/Views/Models Java Basics - Anfänger-Themen 0
Q MVC Verständnisproblem: Controller vs model.modelChanged() Java Basics - Anfänger-Themen 0
F MVC -> Probleme beim Controller Java Basics - Anfänger-Themen 6
F Viele Controller-Klassen Java Basics - Anfänger-Themen 5
C OOP Model View Controller - Prinzip Java Basics - Anfänger-Themen 6
K Model-View-Controller Java Basics - Anfänger-Themen 15
T Kommunikation zwischen Controller und GUI Java Basics - Anfänger-Themen 2
K Frage zum Model View Controller Prinzip Java Basics - Anfänger-Themen 6
M Controller + View: Fehlermeldungen Java Basics - Anfänger-Themen 2
megachucky Model View Controller Pattern - Suche Hilfe bei Anwendung Java Basics - Anfänger-Themen 4
S Model-View-Controller Konzept Beispiel Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben