Рубрики
Без рубрики

[ PT-BR] Падран де Проекто: Объект передачи данных

Значение sobre o padrao для объекта передачи данных проекта com Java. Помечено как учебник, для, java, padraodeprojeto.

Всегда, когда слышала о проектно-я уже думал, в какой-то реализации или архитектура слишком сложным, то, что я привык. Однако, в последнее время, я осознал, что работал с проектно-что facilitava очень “разговор” между клиентскими системами и систем серверов и хотел бы, чтобы объяснить ее в данной статье.

Надеюсь, что понимание чего-то, что для меня, в общем, было супер сложным является более простым для вас.

Объект Передачи данных

Data Transfer Object (DTO), или известный в некоторых местах, только как Transfer Object (TO), это, просто, по умолчанию, который мы используем классы, которые имеют информацию, которые формируются из одной или более сущностей (классы, атрибуты сопоставляются с полями таблицы базы данных). Эти классы имеет целью упрощения, как система должна общаться с другой стороны, в отношении к какой-то процесс.

DTO на практике

Пример, который я показал ниже, учитывает процесс сохранения новой записи Пользователь в базе данных, и ответ наш API будет возвращать.

В этом примере я буду с помощью реализации в Java com Весенняя загрузка .

Занятия

Наш класс UsuarioEntity (отвечает за отображение нашего класса и атрибуты таблицы и поля базы данных):

package com.leonardossev.dtoexemplo.model.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "usuario")
public class UsuarioEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    @Column(name = "nome")
    private String nome;

    @Column(name = "email", unique = true)
    private String email;

    @Column(name = "senha")
    private String senha;

    // Getters e Setters...

}

Наш Repository (интерфейс отвечает за взаимодействие с базой данных):

package com.leonardossev.dtoexemplo.repository;

import com.leonardossev.dtoexemplo.model.entity.UsuarioEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UsuarioRepository extends JpaRepository {
}

Наш Сервис:

package com.leonardossev.dtoexemplo.service;

import com.leonardossev.dtoexemplo.model.entity.UsuarioEntity;
import com.leonardossev.dtoexemplo.repository.UsuarioRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UsuarioService {

    @Autowired
    private UsuarioRepository usuarioRepository;

    public UsuarioEntity salvarUsuario(UsuarioEntity usuario) {
        return this.usuarioRepository.save(usuario);
    }
}

Наша Controller:

package com.leonardossev.dtoexemplo.controller;

import com.leonardossev.dtoexemplo.model.entity.UsuarioEntity;
import com.leonardossev.dtoexemplo.service.UsuarioService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(path = "/usuario")
public class UsuarioController {

    @Autowired
    private UsuarioService usuarioService;

    @PostMapping
    public ResponseEntity salvarUsuario(final @RequestBody UsuarioEntity usuario) {
        return new ResponseEntity(this.usuarioService.salvarUsuario(usuario), HttpStatus.CREATED);
    }

}

Под управлением нашей приложение

Для проверки endpoint ответственности за сохранение записи в базу, я использую Insomnia .

Напоминая, что, если не которая ответит на вопрос, ни один порт, при запуске нашего приложения, он будет доступен на порту 8080.

Обратите внимание, что мы получаем именно информацию мы сохраняем в нашей базе данных. Но, в реальном приложении, вероятно, мы бы не хотели получить все данные таким образом.

Например: не будем хотеть, что пароль от нашего пользователя (без входа в заслугу шифрования) был выдержанным, таким образом.

Другой пример: если мы хотим принести сведения, относящиеся к пользователю, что не так, как в таблице пользователей.

В нашем случае, использование DTO может помочь нам решить этот вопрос таким образом, нам предлагают выбрать, какие данные мы хотим сделать, когда спасти новый пользователь.

Мы собираемся добавить следующий класс в свой проект:

package com.leonardossev.dtoexemplo.model.dto;

public class UsuarioDTO {

    private Long id;

    private String nome;

    private String email;

    public UsuarioDTO(Long id, String nome, String email) {
        this.id = id;
        this.nome = nome;
        this.email = email;
    }

    // Getters e setters...

}

Мы также будем сделать следующие настройки:

  • Реализовать метод в классе UsuarioEntity что станет информацию класса UsuarioEntity для получения информации-класса UsuarioDTO ;
  • Чтобы сделать наш endpoint возвращает объект класса UsuarioDTO .

Реализация метода для преобразования информации

В классе UsuarioEntity создадим следующий метод:

    public UsuarioDTO obterUsuarioDTO() {
        return new UsuarioDTO(this.id, this.nome, this.email);
    }

Изменение рентабельность конечной сохранить пользователя

В нашем пакете, мы будем настроить метод реализации сохранить пользователя (Userentity user) так что он может возвращать объект класса UsuarioDTO :

    public UsuarioDTO salvarUsuario(UsuarioEntity usuario) {
        var usuarioSalvo = this.usuarioRepository.save(usuario);

        return usuarioSalvo.obterUsuarioDTO();
    }

Кроме того, необходимо, делаем настройки в методе нашего controller:

@PostMapping
    public ResponseEntity salvarUsuario(final @RequestBody UsuarioEntity usuario) {
        return new ResponseEntity(this.usuarioService.salvarUsuario(usuario), HttpStatus.CREATED);
    }

Таким образом, когда мы запустили приложение, и мы стараемся сохранить нового пользователя, мы получаем следующие данные:

Обратите внимание, что мы не получаем информацию от пароля пользователя.

Заключительные соображения

Несмотря на простоту, сумели отразить многочисленные случаи, которые у нас есть в нашей повседневной жизни, что изменение формы информации, которая у нас есть, сохраненных в наших возможных источников данных.

Репозиторий с примером из статьи можно узнать здесь .

Характеристика

https://www.baeldung.com/hibernate-identifiers https://stackabuse.com/data-transfer-object-pattern-in-java-implementation-and-mapping/

В случае, если у вас есть вопросы, я всегда открыт для предложений, критики и идей! o/

Оригинал: “https://dev.to/leonardossev/pt-br-padrao-de-projeto-data-transfer-object-3e0o”