Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Facade Pattern und DAO Pattern Java (https://www.delphipraxis.net/185149-facade-pattern-und-dao-pattern-java.html)

BörmtDieBuse 19. Mai 2015 09:47

Facade Pattern und DAO Pattern Java
 
Hallo zusammen,

ich schreibe gerade eine PC Anwendung für eine Datenbank, die Oberfläche ist nicht webbasiert, sie muss mit Swing erstellt werden.
Je mehr ich mich in das Thema Design Pattern einlese desto mehr bin ich verwirrt.

Mein Programm ist folgendermaßen aufgebaut:
UI---Businesslogic---Persistence

Businesslogic und Persistence sind jeweils eine Facade.

Um auf die DB zuzugreifen benutze ich Hibernate. Ein DAO Pattern mit den Tabellen habe ich auch schon erstellt.

Ich versteh aber nicht wie von meiner Persistenceschicht auf mein DAO Pattern zugreifen kann.
Muss ich alle DAOs als Instanz in der Persistenceschicht anlegen, oder wie verbinde ich die beiden.
Danke schonmal im Voraus.

Grüße
Börmt

BUG 19. Mai 2015 11:10

AW: Facade Pattern und DAO Pattern Java
 
Wenn ich dich richtig verstanden haben, ist dein Problem, an welcher Stelle du die konkreten DAOs (die Hibernate kennen) erstellen musst.

Wie hier beschrieben kann du eine abstrakte Factory benutzen, die du in die Businesslogik hereinreichst.
Die Implementierung der Factory kennt/erstellt dann die Implementierungen der DAOs für Hibernate.

EDIT: Ich bin mir aber nicht sicher, wie sinnvoll es ist, Hibernate bzw. JPA wegzuabstrahieren. Es ist ja schon eine ziemlich gute Abstraktion.

BörmtDieBuse 19. Mai 2015 13:10

AW: Facade Pattern und DAO Pattern Java
 
Die DAOs habe ich schon per Hand einfach erstellt.

Mein Problem ist, das ich nicht weiß wie ich von der persistenceschicht(Facade) auf die DAO schicht komm.
Meine CRUD Operationen müssen ja alle in einer DAO sein, oder?

Bsp.

Code:
public interface UserDetailsDAO {

   List<UserDetails> getAllUserDetails();

   UserDetails getUserDetails(String surname, String name);

   void updateUserDetails(UserDetails userdetails);
   
   void deleteUserDetails(UserDetails userdetails);
}
Wenn ich jetzt einen User löschen möchte, muss ich dann eine Instanz von UserDetailsDAO in class PersistenceFacadeImpl erstellen, um die Daten weiterzugeben?
Das scheint mir aber etwas falsch zu sein, da ich dann für jede Tabelle(Entity) eine Instanz in der Klasse PersistenceFacadeImpl anlegen müsste.

Code:
public class PersistenceFacadeImpl implements IPersistenceFacade {

   private SessionFactory sessionFactory;
   private Session session;
   private UserDetailsDAO userDetails;
   // Mit Instanz erlaubt? oder ohne?
   
 public PersistenceFacadeImpl(SessionFactory sessionFactory, Session session) {
   this.sessionFactory = sessionFactory;   
   this.session = session;
}
   
 /**
  * createUser(), in UserDetailsDAO?
  */
   @Override
   public void createUser(String surname, String name) {
      UserDetails user = new UserDetails();
      user.setName(name);
      user.setSurname(surname);
      session.save(user);
      
   }

   @Override
   public void deleteUser(String surname, String name) {
      //Find user with query
      //Delete user
      //Respond to User if delete was successful
      String queryString = "from UserDetails where surname:surname and name=:name";
      Query query = session.createQuery(queryString);
      List<UserDetails> result = query.list();
      UserDetails result2 = result.get(0);
      userDetails.deleteUserDetails(result2);
      
   }


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz