Wat zijn de DAO-, DTO- en Servicelagen in Spring Framework?

Ik schrijf RESTful-services met spring en hibernate. Ik heb veel bronnen op internet gelezen, maar ze hebben mijn twijfels niet verduidelijkt. Leg me in detail uit wat de lagen DAO, DTOen Servicezijn in het lente-framework? En waarom het gebruik van deze lagen in het voorjaar nodig is om RESTfull API-services te ontwikkelen.


Antwoord 1, autoriteit 100%

Ten eerste zijn deze concepten Platform-agnostischen zijn ze trouwens niet exclusief voor Spring Framework of enig ander framework.


Gegevensoverdrachtobject

DTOis een object dat gegevens tussen processen vervoert. Als u met een externe interface werkt, is elk gesprek duur. Als gevolg hiervan moet u het aantal oproepen verminderen. De oplossing is om een ​​Data Transfer Objectte maken dat alle gegevens voor de oproep kan bevatten. Het moet serializeerbaarzijn om over de verbinding te gaan. Gewoonlijk wordt aan de serverzijde een assembler gebruikt om gegevens over te dragen tussen de DTOen eventuele domeinobjecten. Het is vaak weinig
meer dan een heleboel velden en de getters en setters ervoor.


Gegevenstoegangsobject

Een Data Access Objectabstraheert en omvat alle toegang tot
de gegevensbron. De DAObeheert de verbinding met de gegevensbron om
gegevens verkrijgen en opslaan.

De DAO implementeert het toegangsmechanisme dat nodig is om met de gegevensbron te werken.
De gegevensbron kan een permanente winkel zijn, zoals een RDBMS, of een zakelijke service die toegankelijk is via RESTof SOAP.

De DAOabstraheert de onderliggende implementatie van gegevenstoegang voor de Service-objecten om
transparante toegang tot de gegevensbron mogelijk te maken. De Servicedelegeert ook
gegevens laden en opslaan in de DAO.


Service

Service-objecten doen het werk dat de
applicatie moet doen voor het domein waarmee u werkt. Het gaat om berekeningen op basis van invoer en
opgeslagen gegevens, validatie van alle gegevens die uit de presentatie binnenkomen en precies uitzoeken welke gegevens
bronlogica die moet worden verzonden, afhankelijk van de opdrachten die van de presentatie zijn ontvangen.

Een Service Layerdefinieert de grens van een applicatie en de reeks beschikbare bewerkingen van
het perspectief van het verbinden van klantlagen. Het omvat de bedrijfslogica van de applicatie en controleert
transacties en het coördineren van reacties bij de uitvoering van haar activiteiten.


Aanbevolen referenties

Martin Fowler heeft een geweldig boek over algemene Application Architecture Patternsgenaamd Patronen van Enterprise Application Architecture. Er zijn ook Core J2EE-patronendie het bekijken waard zijn.


Antwoord 2, autoriteit 24%

DAO – Object voor gegevenstoegang :

Een object dat een gemeenschappelijke interface biedt om alle databasebewerkingen uit te voeren, zoals het persistentiemechanisme.

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);
}

Zie dit voorbeeld: Spring – DAO en servicelaag

DTO – Object voor gegevensoverdracht:

Een object dat gegevens tussen processen vervoert om het aantal methodeaanroepen te verminderen, betekent dat u meer dan één POJO-entiteit in de servicelaag combineert.

Bijvoorbeeld een GET-verzoek /rest/customer/101/ordersis om alle bestellingen voor klant-ID 101op te halen, samen met klantgegevens, daarom hebt u combinatie-entiteit Customeren entiteit Ordersmet details.


Antwoord 3, autoriteit 12%

Enterprise-applicatie is opgedeeld in lagen voor eenvoudig onderhoud en ontwikkeling. Tiers zijn bestemd voor bepaalde soorten taken, zoals

  • presentatielaag (UI)
  • Bedrijfslaag
  • Gegevenstoegangslaag (DAO, DTO)

Waarom dit ontwerp:
Laten we een voorbeeld nemen, u heeft een toepassing die gegevens uit db leest en er wat bedrijfslogica op uitvoert en deze vervolgens aan de gebruiker presenteert. Als je nu je DB wilt wijzigen, laat dan zeggen dat een eerdere applicatie op Oracle draaide, nu wil je mysql gebruiken, dus als je het niet in lagen ontwikkelt, zul je overal in de applicatie wijzigingen aanbrengen. Maar als u DAO in de toepassing implementeert, kan dit eenvoudig worden gedaan

DAO: Data Access-object is ontwerppatroon
bied gewoon een interface voor toegang tot gegevens tot de servicelaag en bied verschillende implementaties voor verschillende gegevensbronnen (databases, bestandssystemen)

Voorbeeldcode:

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);
}

Servicelaag die Dao gebruikt

@Service("checkerService")
public class CheckerServiceImpl implements CheckerService{
@Autowired
@Qualifier("customerService")
private DaoService daoService;

Nu kan ik elke implementatie van de DaoService-interface leveren.
Service en DTO worden ook gebruikt voor het scheiden van zorgen.


Antwoord 4, autoriteit 2%

DTO: het gegevensobject dat we tussen verschillende processen of binnen hetzelfde proces doorgeven. Het kan een wrapper zijn rond het werkelijke entiteitsobject. Het gebruik van entiteitsobjecten zoals het is voor DTO is niet veilig en wordt niet aanbevolen. Het ontwerp van dit object is gebaseerd op verschillende factoren, zoals eenvoud van weergave, beveiliging van het tonen van ID’s, consumentenvereisten, enzovoort.

In het voorjaar kan DTO worden gevormd met een eenvoudig model/pojo-object.

DAO: het object dat verantwoordelijk is voor CRUD-bewerkingen.

In het voorjaar kan dit een object zijn dat de JPARepository-interface implementeert, of een boon die verbinding maakt met de database en een CRUD voor ons doet. Onthoud uw reis van JDBC naar Hibernate naar Spring data JPA. 🙂

Service: kernboon voor implementatie van bedrijfslogica. Dit object heeft mogelijk een DAO-object als afhankelijkheid. De belangrijkste bedrijfslogica voor de specifieke use case komt hier.

In Spring kan Service-object/bean worden gemaakt door de bean te annoteren met @Service of @Component-annotatie of door het object eenvoudig weer te geven als een bean met behulp van Java-configuratie. Zorg ervoor dat u alle vereiste afhankelijkheden in de serviceboon injecteert voor zijn zware werk.


Antwoord 5

SERVICELAAG:

Het ontvangt het verzoek van de controllerlaag en verwerkt het verzoek naar de Persistence-laag

  • @Controller:Het is de annotatie die de hele controllerlaag initialiseert.
  • @Service:Het is de annotatie die de hele servicelaag initialiseert.
  • @Repository: het is de annotatie die de hele persistentielaag initialiseert.

DTO:

Het is een Data Transfer-object dat vroeger de eigenschappen doorgaf van de servicelaag naar de persistentielaag.

DAO:

Het is een Data Access-object. het is ook bekend als persistentielaag. In deze DAO ontvangen we eigenschapswaarden van de servicelaag in het DTO-object. Hier schrijven we een persistentielogica naar db.


Antwoord 6

DTO is de @Entityannotatie in het voorjaar
DAO is de @Repositoryannotatie in Spring (met Spring Boot JPA hoef je alleen maar de interface te implementeren, nu heb je de annotaties niet meer nodig)
Service is de annotatie @Servicein Spring

Je kunt hier meer lezen: Toegang tot gegevens met JPA

Other episodes