Diverse Design-Fragen

Mercious

Mitglied
Beim selber Entwickeln von neuen Dingen kommen bei mir immer wieder Fragen über gewisse Design-Fragen auf.
Ich würde hier gerne die eine oder andere stellen und hören, was Ihr so dazu denkt. An sich sind es sehr simple Sachverhalten.
Konkret:

1. Ich benutze in meiner Webanwendung jetzt noch das mir bekannte Controller - Service - DAO Pattern. Controller nutzen die Services, um die benötigen Daten für den request aufzubereiten.
Die Services machen dabei alle nötige Business-Logik. Die DAOs nur die reinen Queries an die DB.
Jetzt gibt es aber manchmal den Fall, dass das Holen von gewissen Daten einfach zu 100% vom DAO erledigt wird und der Service dann nichts anderes machen würde, als die Methode des DAOs zu wrappen und genau das gleiche zu returnen. Das fühlt sich irgendwie immer komisch und falsch an.
Die Alternative wäre es, dass der Controller direkt auf das DAO zugreift. Das ist aber noch schlechter, imho, weil dann der Controller manchmal den Service und manchmal das DAO direkt verwendet. Das fühlt sich irgendwie auch falsch an.
Also was macht man? Akzeptiert man, dass manche Methoden des Services nichts anderes machen, als die des DAOs zu wrappen? Ist das OK?

2. Wie geht man mit den unterschiedlichen Sichten/Ausschnitten der Daten um? Mir fällt auf, dass ich oft in verschiedenen Teilen der Anwendung nur eine gewisse Teilmenge der Daten einer Klasse brauche.
Beispielweise würde ich gerne in meiner Session die Informationen "Vorname", "Nachname", "E-Mail" des aktuellen Nutzers hinterlegen, nicht aber den Rest wie "Straße", etc.
Also definiere ich dazu ein neues Bean, nenne es UserSessionBean oder ähnlich. Dann hätte ich noch gerne eines für die Registrierung, also habe ich nun auch ein UserRegisterBean.
Das häuft sich irgendwie und irgendwann hat man ne ganze Menge von Beans, die sich alle um sehr ähnliche Daten drehen.
Gibt es da einen besseren Weg oder wie würdet Ihr das machen?

3. Bei dem "UserSessionBean" von Punkt 2 - würdet ihr dort dem DAO eine Methode geben, das eine Instanz von so einem Bean zurück gibt? Also das DAO direkt bietet eine eigene Methode für genau nur diese Daten an? Oder würdet ihr das DAO nur eine Methode zum Zurückgeben eines ganzen User's geben und dann im Service eine Methode definieren, die diesen User in ein UserSessionBean umwandelt und zurück gibt?
Also (mehr oder weniger Kombination aus allen 3 Fragen):

Java:
public class UserService {
  public UserSessionBean getUserSessionData(final String userID) {
    return this.userDAO.getUserSessionData(userID);
  }
}

public class UserDAO {
  public UserSessionBean getUserSessionData(final String userID) {
    // nur 3 Felder aus der Datenbank holen und in ein UserSessionBean packen
  }
  public User getUser(final String userID) {
    // alle Felder aus DB holen und in einen User packen
  }
}

versus

Java:
public class UserService {
  public UserSessionBean getUserSessionData(final String userID) {
    User user = this.userDAO.getUser(userID);
    UserSessionBean userSessionData = new UserSessionBean();
    userSessionData.setFirstname(user.getFirstname());
    // ...
    return userSessionData;
  }
}

public class UserDAO {
  // nur diese Methode
  public User getUser(final String userID);
}
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter
Ich persönlich nutze Repository statt DAO-Pattern, aber dürfte übertragbar sein...

MMn ist's kein Problem, wenn die Controller direkt auf die Repositories zugreifen. Das Interface eines Repos ist nicht viel "low-leveliger" als das eines Services und die Abhängigkeiten sind weiterhin nur in eine Richtung gerichtet.

Bei mir gibts üblicherweise nur eine (als Beispiel) "User"-Entity.
Wenn es zwingend verschiedene "Sichten" auf diese geben muss, dann gäb's dafür einfach entsprechende Interfaces.

Wenn nötig, gibt es an irgendwelchen System-grenzen noch mal extra DTOs, die werden dann aber da erzeugt, wo sie benötigt werden.
 

Mercious

Mitglied
MMn ist's kein Problem, wenn die Controller direkt auf die Repositories zugreifen. Das Interface eines Repos ist nicht viel "low-leveliger" als das eines Services und die Abhängigkeiten sind weiterhin nur in eine Richtung gerichtet.

Okay, also im obigen Beispiel würde der Controller dann einfach sowohl Methoden des Services als auch des DAOs direkt aufrufen? Im Gegenzug spart man sich das sinnlose wrappen im Service. Okay!

Bei mir gibts üblicherweise nur eine (als Beispiel) "User"-Entity.
Wenn es zwingend verschiedene "Sichten" auf diese geben muss, dann gäb's dafür einfach entsprechende Interfaces.
Wenn nötig, gibt es an irgendwelchen System-grenzen noch mal extra DTOs, die werden dann aber da erzeugt, wo sie benötigt werden.

Wie würdest du dann im oben genannten Beispiel die User Session-Daten in der Session speichern? Als einzelne Werte?
 

Mercious

Mitglied
Kommt ein bisschen drauf an, was der User in dem System ist...

u.U. ist "User" einfach nur Name + Login, und alle anderen Daten liegen im "Profil" oder so, und werden bei Bedarf geladen

Hmm, okay, verstehe. Also der "User" wäre bei dir schon ein kleinerer Ausschnitt des Benutzers und seiner Daten?
Beim obigen Beispiel würde es natürlich mehr Sinn machen, sowas wie ein "HeaderBean" oder sowas zu haben, das alle möglichen Daten hält, die zum Anzeigen des Headers benötigt werden. Dazu gehören wie oben beschrieben Vorname, Nachname, Email aber auch sowas wie Anzahl Artikel im Warenkorb, ArtikelIDs im Warenkorb, etc. .

Trotzdem hat man ja irgendwann den Fall, dass man von dem UserDAO nur diese 3 Felder zurück haben möchte. Also macht es irgendwie schon Sinn, dass man dafür auch irgendein Bean deklariert, oder? Bei dir wäre das halt bereits der "User".
Ansonsten müsste man sich jedes mal den kompletten Benutzer (bei dir "Profil") holen und dann beschneiden - das ist ja irgendwie ineffizient.
 

mrBrown

Super-Moderator
Mitarbeiter
Beim obigen Beispiel würde es natürlich mehr Sinn machen, sowas wie ein "HeaderBean" oder sowas zu haben, das alle möglichen Daten hält, die zum Anzeigen des Headers benötigt werden. Dazu gehören wie oben beschrieben Vorname, Nachname, Email aber auch sowas wie Anzahl Artikel im Warenkorb, ArtikelIDs im Warenkorb, etc. .

Bei mir gibt es keine Beans, sondern Entitäten - und da gehören Dinge wir Artikel und Dinge wie Vorname erstmal nicht zusammen, sondern sind zwei völlig getrennte Dinge.
Für den Header gäb es dann eben "User", "Shopping Cart", "Article", die nicht alle zusammen in ein Objekt gepresst werden.


Trotzdem hat man ja irgendwann den Fall, dass man von dem UserDAO nur diese 3 Felder zurück haben möchte. Also macht es irgendwie schon Sinn, dass man dafür auch irgendein Bean deklariert, oder? Bei dir wäre das halt bereits der "User".
Ansonsten müsste man sich jedes mal den kompletten Benutzer (bei dir "Profil") holen und dann beschneiden - das ist ja irgendwie ineffizient.
Hat man den Fall, dass man ein unvollständiges Objekt braucht?
Ich persönlich habe den Fall eher selten - entweder ich brauche den User, oder eben nicht. Warum sollte ich einen Teil des Nutzers brauchen, ohne einen Nutzer zu brauchen?
 

Thallius

Top Contributor
Hat man den Fall, dass man ein unvollständiges Objekt braucht?
Ich persönlich habe den Fall eher selten - entweder ich brauche den User, oder eben nicht. Warum sollte ich einen Teil des Nutzers brauchen, ohne einen Nutzer zu brauchen?

Braucht man in größeren Projekten ständig wenn man einigermassen performant bleiben will. Nehmen wir alleine mal eine Artikelliste. Ein Artikel kann verdammt groß werden. Wenn ich aber nur eine Liste mit Artikeln haben will brauche ich auch nur die Attribute die in der Liste gezeigt werden. Also zum Beispiel Nr. Name, Anzahl, Preis. Der ARtikel selber hat aber noch zig weitere Attribute wie Best-Nr. Serien-Nr, Größe, Gewicht, etcetc. Wenn ich die für die Liste immer alle mitladen muss wird es langsam und ich brauche Speicher ohne Ende.

Gruß

Claus
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Diverse Fragen bezüglich Jasper Allgemeine Java-Themen 3
I Diverse Files aus Ordner auslesen Allgemeine Java-Themen 10
I Diverse kleinere Verständnisprobleme Allgemeine Java-Themen 8
J Meinung zum verwendeten Design Pattern Allgemeine Java-Themen 4
S Noch eine Design-Frage zu Setter Allgemeine Java-Themen 6
S ArrayList Design Allgemeine Java-Themen 4
S Interface Design von HookUp oder Callback Methoden für eigenes Framework Allgemeine Java-Themen 9
Kirby.exe Framework für Game Design Allgemeine Java-Themen 8
C WindowBuilder Design funktioniert nicht Allgemeine Java-Themen 0
rentasad Design-Frage - Interfaces, Klassen, statische Methoden Allgemeine Java-Themen 3
M OOP Design Pattern - "extends Observable implements Observer" Allgemeine Java-Themen 0
T OOP Fehler im Design Allgemeine Java-Themen 9
perlenfischer1984 Welches Design Pattern ist geegneit. Allgemeine Java-Themen 7
perlenfischer1984 Hilfe bei Design (Pattern) Allgemeine Java-Themen 5
N Vererbung Design-Problem mit vorhandenen, von der Klasse unabhängigen Methoden Allgemeine Java-Themen 12
R Parameter Adapter - Design Allgemeine Java-Themen 1
D Bezüglich Design meines Codes Allgemeine Java-Themen 1
D OOP Design Pattern für GUI - Datenbank Anwendung Allgemeine Java-Themen 1
S Java Design Frage Allgemeine Java-Themen 10
L OOP Klassen-Design (static oder nicht?) Allgemeine Java-Themen 3
P Auf die Anzahl der Joins achten beim WS design Allgemeine Java-Themen 1
M OOP Design Frage Allgemeine Java-Themen 2
J Domain Driven Design - Modellierungsfrage Allgemeine Java-Themen 3
F Welches Design Pattern? Allgemeine Java-Themen 3
H MVC Design Allgemeine Java-Themen 9
J Swing Eigenes Button-design Allgemeine Java-Themen 2
Q Kapselung Allgemeine Design- Frage Allgemeine Java-Themen 8
Z Design um boolsche ausdrücke zu speichern & auszuwerten Allgemeine Java-Themen 3
A Sinnvolles Software Design bei Eigenschaftsänderungen von Objekten Allgemeine Java-Themen 7
C Gutes Code Design (3 Schichten Modell) Allgemeine Java-Themen 19
D Design Stations-Gitter Allgemeine Java-Themen 4
M Public Static importRunning -> Bad Design oder ok ? Allgemeine Java-Themen 5
L Software-Design: Kommunikation mit SerialPort (RXTX) Allgemeine Java-Themen 2
D [Drag&Drop] Design-Pattern-Frage Allgemeine Java-Themen 4
G Design Patterns für Programm Allgemeine Java-Themen 3
I Wie populär ist Design by Contract in Java und was haltet ihr davon? Allgemeine Java-Themen 5
Landei Design-Problem Formel-Parser Allgemeine Java-Themen 10
J Aktionen im State-Design-Modell Allgemeine Java-Themen 3
S Design Oberfläche Allgemeine Java-Themen 2
L Design-Frage: Platzierung der Save-Methode Allgemeine Java-Themen 3
G Domain Driven Design Model Allgemeine Java-Themen 14
G konkretes Domain Driven Design Aggregate Allgemeine Java-Themen 2
ruutaiokwu welches design pattern? frage an die oo-experten unter euch... Allgemeine Java-Themen 3
G Accordion Design Pattern Frage Allgemeine Java-Themen 2
hdi Hilfe beim Design (Stichwort OO, Pattern, ...) Allgemeine Java-Themen 11
B Design Problem Allgemeine Java-Themen 8
faulelotte Verständnisproblem Domain Driven Design Allgemeine Java-Themen 3
S Frage zum Design der Datenstruktur Allgemeine Java-Themen 10
D design gesucht - Angabe von zu ersetzenden substrings Allgemeine Java-Themen 2
D Design ohne Getter und Setter Allgemeine Java-Themen 8
D Design: on-the-fly-Parsing + Datenstrukturen Allgemeine Java-Themen 5
N Welches design pattern? Allgemeine Java-Themen 8
D design client server Allgemeine Java-Themen 10
T Design-Frage Allgemeine Java-Themen 14
S XML-Parsing / public-Member-Variablen / Design-Frage Allgemeine Java-Themen 8
S JToolBar Design Allgemeine Java-Themen 3
M Bildersyncronisierung - Design Patterns? Allgemeine Java-Themen 2
T Design - Exception in Thread Allgemeine Java-Themen 3
G Composite, Design Pattern, printTree Allgemeine Java-Themen 42
N Design-Frage: persistent machen per Reflection Allgemeine Java-Themen 3
M Frage zum Design :: allgemein Allgemeine Java-Themen 6
M MVC Design Pattern - Verständniss Fragen Allgemeine Java-Themen 3
U Frage zu DB Design Allgemeine Java-Themen 3
K Design / Implementierung Allgemeine Java-Themen 5
N Checkstyle - Design for Extension Allgemeine Java-Themen 4
F Design Pattern zur Realisierung von Mehrfachvererbung? Allgemeine Java-Themen 8
E Was ist ein gutes Design fuer meine Programm? Allgemeine Java-Themen 3
F Paket und Software Design Fragen. Allgemeine Java-Themen 5
P Apple Design Allgemeine Java-Themen 5
S design frage Allgemeine Java-Themen 10
T Design-Tipp gesucht Allgemeine Java-Themen 2
M Design von Java Klassen Allgemeine Java-Themen 2
G java design von klassen und projekten Allgemeine Java-Themen 6
K Design: Klassen in Pakete aufteilen - Eure Meinung Allgemeine Java-Themen 8
S Programmierstil / design Allgemeine Java-Themen 9
S Exception design Allgemeine Java-Themen 2
m@nu Exception-Design Allgemeine Java-Themen 4
R Design-Frage Allgemeine Java-Themen 9
N Hilfe beim Design Allgemeine Java-Themen 13
D Design Pattern: Singleton Allgemeine Java-Themen 4
Torres Design-Problem mit Jakarta Struts Allgemeine Java-Themen 2
A Anwendungs-Design (Plugin-Architektur) Allgemeine Java-Themen 4
Zrebna Fragen zu Testabdeckungs-Metriken Allgemeine Java-Themen 4
MarvinsDepression Unbekanntes Zeichen in fremden Code wirft Fragen auf Allgemeine Java-Themen 4
B HTTP Allgemeine Fragen über Suchmaschine nutzen mit Java Allgemeine Java-Themen 20
K BlueJ - Fragen zu dem Spiel Pacman (Nachprogrammieren) Allgemeine Java-Themen 141
V Ich hätte 2 Fragen Allgemeine Java-Themen 5
ME2002 Fragen aus einer Java Klausur Allgemeine Java-Themen 67
H Fragen zur Kraken Api Allgemeine Java-Themen 1
nonickatall Klassen Grundsätzliche Fragen zu geplanter Programmstruktur Allgemeine Java-Themen 5
W Ein paar Fragen zu .properties und .css Allgemeine Java-Themen 6
W Mal ein paar generelle Fragen zu InputStream und OutputStream Allgemeine Java-Themen 4
X Fragen zur Javamail API und Gmail Allgemeine Java-Themen 4
T Fragen bezgl. Lambdas Allgemeine Java-Themen 20
X Collections Fragen zu gleichen Elementen in TreeSet Allgemeine Java-Themen 35
A Neuerungen in Java 8 StreamAPI- Paar fragen Allgemeine Java-Themen 4
temi Fragen zur Software-Architektur Allgemeine Java-Themen 123
J 2 Fragen zur Vererbung Allgemeine Java-Themen 5
H Java FX 2 Fragen um Programm in mehrere sprachen zu übersetzen in Gluon Framwork Allgemeine Java-Themen 3
M Fragen beantworten über Textfeldeingabe Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben