Задать вопрос
@sirinotapple

Чем отличаются dto, entity...?

Привет, у нас есть entity которая описывает то как данные хранятся в бд
есть dto которая указывает как валидировать данные от клиента
как называется то что позволяет обрезать данные отправляемые на клиент
  • Вопрос задан
  • 2697 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
yarkov
@yarkov
Помог ответ? Отметь решением.
Обрезкой данных занимается сериализатор
Ответ написан
Комментировать
Frostealth
@Frostealth
Backend Developer
DTO (Data Transfer Object, объект передачи данных) - это объект, единственной целью которого является передача каких-либо данных между слоями, компонентами системы и т.д. По сути это просто структура. Никакой бизнес-логики DTO не содержит. Только данные в своих полях. Обычно DTO являются иммутабельными (immutable - неизменяемый), что предполагает невозможность изменить данные внутри DTO после его создания.

Пример DTO

// с использованием read-only properties
class CustomerDTO {
    public final integer id;
    public final string name;

    public CustomerDTO(integer id, string name) {
        this.id = id;
        this.name = name;
   }
}

// с использованием геттеров (getters)
class CustomerDTO {
    private integer id;
    private string name;

    public CustomerDTO(integer id, string name) {
        this.id = id;
        this.name = name;
    }

    public integer getId() {
        return this.id;
    }

    public string getName() {
        return this.name;
    }
}



Entity - это сущность. Сущности представляют объекты предметной области (модели), описывают свойства и поведение. Они отличаются продолжительным циклом жизни и индивидуальностью. Простыми словами, они имеют идентификатор (id) и их где-то хранят между запросами, например в БД.
Идентификатор (id) сущности позволяет нам отличать одного Васю Пупкина от другого Васи Пупкина. И тот, и другой - Вася Пупкин, но их важно различать по какому-нибудь уникальному признаку.

Пример Entity

class Customer {
    private integer id;
    private string firstName;
    private string lastName;
    private integer walletBalance;  // кошелек здесь ради примера

    public Customer(integer id, string firstName, string lastName) {
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
        this.walletBalance = 0;
    }

    public integer getId() {
        return this.id;
    }

    public string getFirstName() {
         return this.firstName;
    }

    public string getLastName() {
        return this.lastName;
    }

    public string getFullName() {
        return this.firstName + " " + this.lastName;
    }

    public void rename(string firstName, string lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public void takeMoney(Money money) {
        this.walletBalance += money.amount;
    }

    public Money giveMoney(integer amount) throws InsufficientFunds {
        if (this.walletBalance < amount) {
            throw new InsufficientFunds();
        }

        this.walletBalance -= amount;
        return Money(amount);
    }
}



есть dto которая указывает как валидировать данные от клиента

DTO, по идее, не должна содержать никаких правил валидации. Но для упрощения и удобства правила все же прописывают прямо в DTO, обычно с помощью аннотаций (декораторов, аттрибутов - зависит от языка).

у нас есть entity которая описывает то как данные хранятся в бд

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

как называется то что позволяет обрезать данные отправляемые на клиент

Не совсем понятно что вы имеете в виду. Примеры могли бы помочь понять.
Но, вероятно, речь идет о сериализации (Serialization). Сериализатор (Serializer) трансформирует объекты, например DTO, в другую структуру данных, например в JSON.
Пример использования сериализации

serializer.serialize(new CustomerDTO(1, "John Smith")); // -> {"id": 1, "name": "John Smith"}

Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы