Ich schreibe RESTful-Services mit Spring und Hibernate. Ich habe viele Ressourcen im Internet gelesen, aber sie haben meine Zweifel nicht geklärt. Bitte erklären Sie mir im Detail, was DAO , DTO und Service Schichten im Federgerüst? Und warum die Verwendung dieser Schichten im Frühjahr erforderlich ist, um RESTfull-API-Services zu entwickeln.
Zunächst einmal sind diese Konzepte plattformunabhängig und nicht exklusiv für Spring Framework oder ein anderes Framework.
DTO
ist ein Objekt, das Daten zwischen Prozessen überträgt. Wenn Sie mit einer Remote-Schnittstelle arbeiten, ist jeder Anruf teuer. Infolgedessen müssen Sie die Anzahl der Anrufe reduzieren. Die Lösung besteht darin, ein Data Transfer Object
, der alle Daten für den Anruf enthalten kann. Es muss serialisierbar sein , um über die Verbindung zu gehen. Normalerweise wird ein Assembler auf der Serverseite verwendet, um Daten zwischen dem DTO
und beliebigen Domänenobjekten zu übertragen. Es ist oft nicht viel mehr als ein Haufen Felder und die Stärkeren und Stärkeren für sie.
EIN Data Access Object
abstrahiert und kapselt den gesamten Zugriff auf die Datenquelle. Das DAO
verwaltet die Verbindung mit der Datenquelle, um Daten abzurufen und zu speichern.
Das DAO implementiert den Zugriffsmechanismus, der für die Arbeit mit der Datenquelle erforderlich ist. Die Datenquelle kann ein persistenter Speicher wie ein RDBMS
oder ein Geschäftsdienst sein, auf den über REST
oder SOAP
zugegriffen wird.
Das DAO
abstrahiert die zugrunde liegende Datenzugriffsimplementierung für die Service
-Objekte, um einen transparenten Zugriff auf die Datenquelle zu ermöglichen. Das Service
delegiert auch Datenlade- und Speicheroperationen an das DAO
.
Service
Objekte erledigen die Arbeit, die die Anwendung für die Domäne erledigen muss, mit der Sie arbeiten. Es umfasst Berechnungen auf der Grundlage von Eingaben und gespeicherten Daten, die Validierung aller von der Präsentation eingehenden Daten und die Ermittlung der genauen zu versendenden Datenquellenlogik in Abhängigkeit von den von der Präsentation empfangenen Befehlen.
EIN Service Layer
definiert die Grenze einer Anwendung und ihre verfügbaren Operationen aus der Perspektive der Anbindung von Client-Layern. Es kapselt die Geschäftslogik der Anwendung, steuert Transaktionen und koordiniert die Reaktionen bei der Implementierung ihrer Operationen.
Martin Fowler hat ein großartiges Buch über gemeinsame Anwendungsarchitekturmuster mit dem Namen Muster der Unternehmensanwendungsarchitektur . Es gibt auch Core J2EE Patterns die einen Blick wert sind.
Ein Objekt, das eine gemeinsame Schnittstelle bietet, um alle Datenbankoperationen wie den Persistenzmechanismus auszuführen.
public interface GenericDao<T> {
public T find(Class<T> entityClass, Object id);
public void save(T entity);
public T update(T entity);
public void delete(T entity);
public List<T> findAll(Class<T> entityClass);
}
Siehe dieses Beispiel: Spring - DAO und Service Layer
DTO - Datenübertragungsobjekt :
Ein Objekt, das Daten zwischen Prozessen überträgt, um die Anzahl der Methodenaufrufe zu verringern, bedeutet, dass Sie mehr als eine POJO-Entität in der Serviceschicht kombinieren.
Beispielsweise besteht eine GET-Anforderung /rest/customer/101/orders
Darin, alle Bestellungen für die Kunden-ID 101
Zusammen mit den Kundendaten abzurufen. Sie müssen daher die Entität Customer
und die Entität Orders
mit kombinieren Einzelheiten.
Die Unternehmensanwendung ist zwecks einfacher Wartung und Entwicklung in Ebenen unterteilt. Ebenen sind auf bestimmte Arten von Aufgaben wie gewidmet
Warum dieses Design: Nehmen wir ein Beispiel: Sie haben eine Anwendung, die Daten aus db liest und eine Geschäftslogik darauf ausführt und sie dann dem Benutzer präsentiert. Wenn Sie Ihre Datenbank ändern möchten, sagen wir, dass eine frühere Anwendung unter Oracle ausgeführt wurde, möchten Sie jetzt mysql verwenden. Wenn Sie sie also nicht in Ebenen entwickeln, werden Sie Änderungen überall in der Anwendung vornehmen. Wenn Sie DAO jedoch in einer Anwendung implementieren, ist dies problemlos möglich
DAO: Datenzugriffsobjekt ist ein Entwurfsmuster, das lediglich eine Schnittstelle für den Zugriff auf die Serviceebene und verschiedene Implementierungen für verschiedene Datenquellen (Datenbanken, Dateisysteme) bereitstellt.
Beispielcode:
public interface DaoService {
public boolean create(Object record);
public CustomerTemp findTmp(String id);
public Customer find(String id);
public List getAllTmp();
public List getAll();
public boolean update(Object record);
public boolean delete(Object record);
public User getUser(String email);
public boolean addUser(User user);
}
Serviceschicht mit Dao
@Service("checkerService")
public class CheckerServiceImpl implements CheckerService{
@Autowired
@Qualifier("customerService")
private DaoService daoService;
Jetzt kann ich jede mögliche Implementierung der DaoService-Schnittstelle zur Verfügung stellen. Service und DTO werden auch zur Trennung von Anliegen verwendet.
SERVICE LAYER:
Es empfängt die Anforderung von der Controllerschicht und verarbeitet die Anforderung an die Persistenzschicht
DTO:
Hierbei handelt es sich um ein Datenübertragungsobjekt, mit dem die Eigenschaften von der Serviceschicht an die Persistenzschicht übergeben wurden.
DAO:
Es ist ein Datenzugriffsobjekt. Es ist auch als Persistenzschicht bekannt. In diesem DAO erhalten wir Eigenschaftswerte von der Serviceebene im DTO-Objekt. Hier schreiben wir eine Persistenzlogik an db.