В этом рассказе я рассмотрю концепцию шаблонов распределения, объекта передачи данных и удаленного фасада.

Объект передачи данных
Я почти уверен, что вы уже слышали о DTO (также называемых объектами значений) и создали хотя бы один класс DTO за свою карьеру разработчика программного обеспечения.
Когда вы работаете с удаленным интерфейсом (например, с веб-сервисами), каждый вызов к нему стоит дорого. В результате вам нужно уменьшить количество вызовов, а это означает, что вы должны использовать DTO, который агрегирует данные для передачи большего количества данных с каждым вызовом.
Объект передачи данных не должен содержать никакой бизнес-логики, и он должен быть сериализуемым для передачи через соединение. Обычно ассемблер, также называемый маппером, используется для передачи данных между объектами домена и объектами DTO.
Давайте посмотрим на пример класса DTO.
public class Article {
private long id;
private long authorId;
private String text;
private Timestamp publishTimestamp;
// getters and setters
}
public class Author {
private long id;
private String name;
private String profileUrl;
private String profileImageUrl;
// getters and setters
}
public class ArticleDTO {
private long id;
private String text;
private AuthorDTO author;
private Timestamp publishTimestamp;
// getters and setters
}
public class AuthorDTO {
private String name;
private String profileUrl;
private String profileImageUrl;
// getters and setters
}
Удаленный фасад
Удаленный фасад предназначен для минимизации количества удаленных вызовов в приложении. Этот шаблон содержит крупнозернистый интерфейс для одного или нескольких мелкозернистых объектов. Шаблон удаленного фасада не содержит бизнес-логики, он только преобразует крупномасштабные методы в базовые мелкозернистые методы. Часто шаблон удаленного фасада комбинируется с шаблоном объекта передачи данных.
Давайте посмотрим на очень простой пример ...
public class StorageManager {
public boolean isItemAvailable(int itemId) {
// implementation...
}
}
public class Packager {
public void packItem(int itemId) {
// implementation...
}
}
public class RemoteStore {
private final StorageManager storageManager;
private final Packager packager;
public RemoteStore(StorageManager storageManager,
Packager packager) {
this.storageManager = storageManager;
this.packager = packager;
}
public void buyItem(int itemId) {
if (storageManager.isItemAvailable(itemId)) {
packager.packItem(itemId);
}
// implementation ...
}
}
Давайте посмотрим на график, когда объединены паттерны объекта передачи данных и удаленного фасада.
