2012-04-05 11 views

Odpowiedz

41

Nie ma różnicy, jak daleko jak wiosna. Zgodnie z konwencją można oznaczyć klasy DAO za pomocą @Repository i usług za pomocą @Service. Także ten pierwszy dokonuje translacji wyjątków warstwy trwałości.

Ponieważ pytasz o to teoretycznie: DAO powinien wykonywać operacje na surowych bazach danych i tłumaczyć je na konstrukcje wyższego poziomu (obiekty, kolekcje). Usługi powinny wywoływać DAO i wykonywać operacje biznesowe. Zazwyczaj rozgraniczanie transakcji odbywa się na warstwie usług w celu obsłużenia kilku wywołań DAO.

Wreszcie DAO powinno abstrakcyjnie logikę biznesową z detali utrwalania, idealnie pozwalając na zmianę warstwy trwałości bez zmian logiki biznesowej (usług). Jest to prawie niemożliwe z powodu wycieku abstrakcji dostawców utrwalania (np. Leniwe ładowanie).

10

DAO - obiekt dostępu do danych, jest obiektem do obsługi połączenia z twoją pamięcią danych (typowo baza danych). Masz tu swoje zapytania, a DAO dostarcza danych do twoich usług.

Usługi powinny zawierać całą Twoją logikę. Jeśli masz logiczne separete, możesz teoretycznie zmienić warstwę interfejsu użytkownika lub warstwę DAO bez wpływu na nią.

4

DAO (Data Access Object) jest wzorzec projektowy, które składają się na tworzeniu dla każdej tabeli w bazie danych klasy, zapewnia technikę rozdzielania obiektów wytrwałości i logiki dostępu do danych

0

Chociaż minęło wiele lat od zadawania tego pytania, wciąż są ludzie (tacy jak ja), którzy chcą poznać odpowiedź na to pytanie. Oprócz powyższych odpowiedzi chcę podzielić się tym, co znalazłem:

W wielu podstawowych wiosennych kodów napisanych dla uczniów wiosennych dane są właśnie przechowywane i odczytywane tylko z bazy danych. A DAO wstrzykują SessionFactory. Następnie mamy Usługi, które wydają się robić to samo. I nowi uczniowie zastanawiają się, dlaczego mamy dwa podobne interfejsy i klasy - dao i usługi.

Jednak w prawdziwym świecie mogą istnieć inne równoległe typy przechowywania danych (np. Dane jednego rodzaju mogą być przechowywane w bazie danych, a niektóre inne dane przechowywane w pliku lub innych typach pamięci mogą być używane dany punkt czasu).

W tego rodzaju przypadkach klasy kontrolerów musiałyby wstrzykiwać wiele różnych typów interfejsów (jeden pracujący z DB i inne pracujące z plikami i innymi). A jeśli istnieje aplikacja mobilna korzystająca z tych samych źródeł danych, które aplikacja mobilna skonfigurowałaby dla wszystkich typów źródeł danych.

Więc zamiast robić to, gdy usługi są wykorzystywane klasy sterownika, aplikacje mobilne, itp mogą korzystać jedynie obsługę i serwis współpracuje z dowolnej liczby źródeł danych wytrwałości mamy.

Później, gdy nastąpiła zmiana liczby lub rodzaju danych wytrwałości źródeł zmieniających wszystko byłoby również zrobić w dotkniętych DAOs i służby, stąd sterowników, aplikacji mobilnych i itd. Nie mogą być naruszone - będą kontynuować przy użyciu tego samego usługa.

Wszystko to sensownie zmniejsza ilość pracy do zrobienia.

Istnieje wzór wzoru fasady, który zaleca taką konfigurację jako lepszy projekt.

Widać wielką graficzne przedstawienie tego w tym wielkim artykułu:

https://springframework.guru/gang-of-four-design-patterns/facade-pattern/

Więc chociaż w podstawowych aplikacjach Wiosna w oparciu o jednego źródła danych używane wyłącznie przez użytkowników Web App (kontrolerów) w prawdziwym Rozróżnienie scenariusza życia między DAO a usługą staje się oczywiste.

Mam nadzieję, że to pomoże.

Powiązane problemy