Сообщение Re[2]: Дизайн разделения бизнес-слоя (логического) на два ур от 23.05.2024 13:08
Изменено 23.05.2024 13:09 zelenprog
Re[2]: Дизайн разделения бизнес-слоя (логического) на два уровня (физических)
R>Для решения проблемы разделения слоя бизнес-логики на два физических уровня, необходимо использовать архитектурные подходы, которые позволяют скрыть детали низкоуровневой инфраструктуры и при этом обеспечивают необходимое взаимодействие между частями бизнес-логики. Вот примерная схема и дизайн решения такого взаимодействия ...
Спасибо! Идею понял.
R>
Получается, что мы сформировали BusinessObject2 на втором физическом уровне-2, "упаковали" его в DTO, передали на уровень-1, и "распаковали".
То есть на уровне-1 есть класс, реализующий функциональность BusinessObject2.
И далее на уровне-1 мы уже работаем с ним как с обычным локальным бизнес-объектом.
Получается, что в данном примере на уровень-2 вынесено только создание\инициализация объекта. Как я понял, в этом случае предполагается, что и на уровне-1 и на уровне-2 есть одинаковая реализация класса BusinessObject2.
А что делать, если функциональность BusinessObject2 поделена на два уровня? Или вообще вся его функциональность находится на уровне-2?
То есть обращаясь к какому-либо методу BusinessObject2 на уровне-1, фактически должна происходить переадресация на уровень-2.
В этом случае вызов каждого метода BusinessObject2 — это обращение на уровень-2.
Получается, BusinessObject2 должен сам "переадресовывать" вызовы на другой уровень?
Спасибо! Идею понял.
R>
Пример реализации
R>Service1Facade на ПК-1
R>R>public class Service1Facade {
R> private Service1 service1;
R> public Service1Facade(Service1 service1) {
R> this.service1 = service1;
R> }
R> public BusinessObject2 getBusinessObject2(int id) {
R> // Взаимодействие с Service2 через сеть
R> String url = "http://service2.example.com/api/businessObject2/" + id;
R> BusinessObject2DTO dto = RestClient.get(url, BusinessObject2DTO.class);
R> return mapToBusinessObject2(dto);
R> }
R> private BusinessObject2 mapToBusinessObject2(BusinessObject2DTO dto) {
R> // Маппинг DTO в бизнес-объект
R> return new BusinessObject2(dto.getId(), dto.getName(), dto.getValue());
R> }
R>}
R>
Получается, что мы сформировали BusinessObject2 на втором физическом уровне-2, "упаковали" его в DTO, передали на уровень-1, и "распаковали".
То есть на уровне-1 есть класс, реализующий функциональность BusinessObject2.
И далее на уровне-1 мы уже работаем с ним как с обычным локальным бизнес-объектом.
Получается, что в данном примере на уровень-2 вынесено только создание\инициализация объекта. Как я понял, в этом случае предполагается, что и на уровне-1 и на уровне-2 есть одинаковая реализация класса BusinessObject2.
А что делать, если функциональность BusinessObject2 поделена на два уровня? Или вообще вся его функциональность находится на уровне-2?
То есть обращаясь к какому-либо методу BusinessObject2 на уровне-1, фактически должна происходить переадресация на уровень-2.
public class Service1AnyController {
private Service1Facade mService1Facade;
public Service1AnyController(Service1Facade pService1Facade) {
this.mService1Facade = pService1Facade;
}
public SomeMethod (int id) {
//...
lBusinessObject2 = this.mService1Facade.getBusinessObject2(id);
lRes1 = lBusinessObject2.Operation1();
lRes2 = lBusinessObject2.Operation2();
lSum = lRes1 + lRes2;
return lSum;
}
}
В этом случае вызов каждого метода BusinessObject2 — это обращение на уровень-2.
Получается, BusinessObject2 должен сам "переадресовывать" вызовы на другой уровень?
Re[2]: Дизайн разделения бизнес-слоя (логического) на два ур
R>Для решения проблемы разделения слоя бизнес-логики на два физических уровня, необходимо использовать архитектурные подходы, которые позволяют скрыть детали низкоуровневой инфраструктуры и при этом обеспечивают необходимое взаимодействие между частями бизнес-логики. Вот примерная схема и дизайн решения такого взаимодействия ...
Спасибо! Идею понял.
R>
Получается, что мы сформировали BusinessObject2 на втором физическом уровне-2, "упаковали" его в DTO, передали на уровень-1, и "распаковали".
То есть на уровне-1 есть класс, реализующий функциональность BusinessObject2.
И далее на уровне-1 мы уже работаем с ним как с обычным локальным бизнес-объектом.
Получается, что в данном примере на уровень-2 вынесено только создание\инициализация объекта. Как я понял, в этом случае предполагается, что и на уровне-1 и на уровне-2 есть одинаковая реализация класса BusinessObject2.
А что делать, если функциональность BusinessObject2 поделена на два уровня? Или вообще вся его функциональность находится на уровне-2?
То есть обращаясь к какому-либо методу BusinessObject2 на уровне-1, фактически должна происходить переадресация на уровень-2.
В этом случае вызов каждого метода BusinessObject2 — это обращение на уровень-2.
Получается, BusinessObject2 должен сам "переадресовывать" вызовы на другой уровень?
Спасибо! Идею понял.
R>
R>public class Service1Facade {
R> private Service1 service1;
R> public Service1Facade(Service1 service1) {
R> this.service1 = service1;
R> }
R> public BusinessObject2 getBusinessObject2(int id) {
R> // Взаимодействие с Service2 через сеть
R> String url = "http://service2.example.com/api/businessObject2/" + id;
R> BusinessObject2DTO dto = RestClient.get(url, BusinessObject2DTO.class);
R> return mapToBusinessObject2(dto);
R> }
R> private BusinessObject2 mapToBusinessObject2(BusinessObject2DTO dto) {
R> // Маппинг DTO в бизнес-объект
R> return new BusinessObject2(dto.getId(), dto.getName(), dto.getValue());
R> }
R>}
R>
Получается, что мы сформировали BusinessObject2 на втором физическом уровне-2, "упаковали" его в DTO, передали на уровень-1, и "распаковали".
То есть на уровне-1 есть класс, реализующий функциональность BusinessObject2.
И далее на уровне-1 мы уже работаем с ним как с обычным локальным бизнес-объектом.
Получается, что в данном примере на уровень-2 вынесено только создание\инициализация объекта. Как я понял, в этом случае предполагается, что и на уровне-1 и на уровне-2 есть одинаковая реализация класса BusinessObject2.
А что делать, если функциональность BusinessObject2 поделена на два уровня? Или вообще вся его функциональность находится на уровне-2?
То есть обращаясь к какому-либо методу BusinessObject2 на уровне-1, фактически должна происходить переадресация на уровень-2.
public class Service1AnyController {
private Service1Facade mService1Facade;
public Service1AnyController(Service1Facade pService1Facade) {
this.mService1Facade = pService1Facade;
}
public SomeMethod (int id) {
//...
lBusinessObject2 = this.mService1Facade.getBusinessObject2(id);
lRes1 = lBusinessObject2.Operation1();
lRes2 = lBusinessObject2.Operation2();
lSum = lRes1 + lRes2;
return lSum;
}
}
В этом случае вызов каждого метода BusinessObject2 — это обращение на уровень-2.
Получается, BusinessObject2 должен сам "переадресовывать" вызовы на другой уровень?