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"}