• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

DTO i DAO, rozróznienie

VPS Starter Arubacloud
0 głosów
13,605 wizyt
pytanie zadane 28 września 2018 w Java przez pomaraqcz Początkujący (380 p.)
Dzień dobry,

mam pytanie odnośnie dao i dto. Niby czytając o tym wszystko wydaje się klarowne, ale jednak gdzieś mi coś umyka i nie do końca chwytam co i kiedy.

Prosty przykład, załóżmy, że w bazie danych trzymam informacje jak imie, nazwisko, wiek, wzrost itp. i chce stworzyć w javie okbiek klasy Person(). Z tego co wyczytałem do tej pory to powiino to wyglądać tak, że dao wyciąga wszystkie potrzebne dane z bazy danych sqlem a w dto mam wszystkie pola, konstruktor gettery i settery i dopiero potem dzieki dto mogę stworzyć obiekt Person()?

1 odpowiedź

+5 głosów
odpowiedź 28 września 2018 przez mbabane Szeryf (79,280 p.)

Na początek rozszyfrujmy skróty:

DAO - Data Access Object - czyli coś co zapewnia dostęp do źródła danych, nie ważne czy to z pliku czy to z bazy danych. Najlepiej żeby to był interfejs bo dzięki temu możliwe jest bardzo łatwe zmienianie źródła danych - co ma jeszcze dodatkowe znaczenie w testowaniu.

public interface UserDAO
{
   List<User> getAllUsers();
}

I teraz nie ma problemu żeby zaimplementować ten interfejs np. tak żeby pobierał dane z pliku, a drugą implementacją będzie integracja z bazą danych:

public class FileData implements UserDAO
{
      public List<User> getAllUsers() 
      {
       //....implemetnacja
       }
}

//dla bazy danych
public class DBData implements UserDAO
{
      public List<User> getAllUsers()
      {
          //implementacja
      }
}

I teraz kod, który korzysta z DAO jest odporny na zmianę źródła danych:

public class UserService
{
   UserDAO userDAO;

   public UserService(UserDAO userDAO)
   {
        this.userDAO = userDAO;
   }

   public List<User> getAllUsers()
   {
        return userDAO.getAllUsers();
   }
}

//zastosowanie powyższej klasy
UserService userService = new UserService(new FileData()); //kiedy źródło danych to plik

UserService userService2 = new UserService(new DBData()); //kiedy źródło to baza danych

//zauważ że w kodzie klasy UserService nie trzeba nić zmieniać kiedy zmienia się źródło danych

DTO - Data Transfer Object - to obiekt, za pośrednictwem, którego udostępnia się jakieś dane zwykle na zewnątrz aplikacji - suche dane. To ma głównie zastosowanie w aplikacjach, które posiadają interfejs do którego można podłączyć się zdalnie (np. REST API), i gdzie dane udostępniane są tak na prawdę nie wiadomo komu. Błędem jest wystawianie bezpośrednio encji pobranych z bazy na zewnątrz. Dzięki DTO można udostępnić tylko część danych np. nie powinno się wyciągać haseł - nawet jeśli są hashowane.

To wydaje mi się, że najlepiej widać kiedy stosuje się JPA. Klasy encji są tak na prawdę tabelami bazy danych, i ich struktury nie można ujawniać. Być może jeszcze nie ma potrzeby udostępniania wszystkich danych np. wspomnianych haseł:

@Entity
public class Person
{
      private String PESEL;
      private String firstName;
      private String lastName;
      private String password;

      //gettery settery
}

Jeśli udostępnia się powyższy obiekt - to nie należy udostępniać hasła i numeru PESEL:

public class PersonDTO
{
     private String firstName;
     private String lastName;

     //gettery settery
}

 

Podobne pytania

0 głosów
2 odpowiedzi 162 wizyt
pytanie zadane 20 września 2018 w Java przez konser Nowicjusz (140 p.)
0 głosów
1 odpowiedź 531 wizyt
pytanie zadane 5 sierpnia 2020 w Java przez Szyszka Gaduła (3,490 p.)
0 głosów
2 odpowiedzi 234 wizyt
pytanie zadane 5 lipca 2018 w Java przez must Bywalec (2,980 p.)

92,453 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...