Дизайн разделения бизнес-слоя (логического) на два уровня (физических)
От: zelenprog  
Дата: 23.05.24 07:36
Оценка: 4 (1)
Снова всем Здравствуйте!

Я продолжаю "бороться" с архитектурой приложения.
Суть архитектуры приложения в целом понятна — надо разделить приложение на логические слои:
— UI — пользовательский интерфейс,
— Model — модель, бизнес-логика, бизнес-слой,
— Infrastructure — это все низкоуровневые детали типа базы данных и т.д.

А вот многие детали реализации архитектуры мне непонятны в связи с недостатком опыта.
Возник следующий вопрос.

Кроме деления приложения на "логические" слои, приложение делится еще и на "физические" уровни.
Уровень, грубо говоря, — это физический компьютер, на котором выполняется программный код.
"Уровень" — это возможно не совсем точный термин.
Но вот в этой статье от Microsoft применяется именно термин "уровень":
https://learn.microsoft.com/ru-ru/azure/architecture/guide/architecture-styles/n-tier

В случае когда каждому логическому слою приложения соответствует "свой" физический уровень, это разделение как бы "естественное".
В этом случае граница между слоями совпадает с границей между уровнями, по сути это одна и та же "граница", которая реализуется через адаптеры инфраструктуры.
Получается, что дизайн и реализация взаимодействия и слоев и уровней через эти границы — совпадают.

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

Как это реализуется?
Как построить правильную архитектуру (правильный дизайн) такого разделения слоя?

Тут проблема в следующем.
Объекты слоя бизнес-логики должны обращаться только к другим объектам бизнес-логики. Они не должны ничего знать про инфраструктуру. Однако, чтобы "связать" две части бизнес-логики, расположенные на разных ПК (на разных уровнях), нужно использовать низкоуровневое взаимодействие через сеть.
Получается, что если один объект BusinessObject1, расположенный на ПК-1, хочет создать экземпляр BusinessObject2, который реализован на ПК-2, то BusinessObject1 просто вынужден "знать" про инфраструктуру, чтобы запросить через сеть (например, через REST-запрос) у другого ПК экземпляр BusinessObject2.

Как-то это неправильно. Или я чего-то не понимаю.

Объясните, пожалуйста, как это делается?
Интересует хотя бы примерная схема\дизайн решения такого взаимодействия "внутри" одного слоя через сеть.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.