Я помогаю компании с программным пакетом, который будет гибко поддерживать несколько сценариев развертывания. Пакет написан на .NET, имеет четко определенный BLL и использует SQL Server для базы данных.
Проект требует четкого разграничения между доступом к данным и службами (BLL) и пользовательским интерфейсом. На данный момент существует как минимум два интерфейса пользователя (WinForms и Web). Мы предлагаем решение WCF для запуска слоя BLL, который можно запустить на мощном сервере приложений. Этот путь довольно хорошо обозначен и понятен на этом этапе и охватывает один из наших необходимых сценариев развертывания.
Сценарии развертывания (в произвольном порядке):
Большая многопользовательская среда с 1-n серверами приложений, все из которых имеют выделенный SQL-сервер подходящего размера.
Многопользовательская среда, выполняющая пользовательский интерфейс / BLL на компьютере каждого отдельного пользователя, все обращаются к общему серверу SQL.
Однопользовательская среда с одним компьютером, на котором выполняется все приложение на своем компьютере (включая SQL-сервер).
Меня беспокоит не столько сценарий (1), сколько (2) и (3). Если развертывание относится к типу (2) или (3), WCF на самом деле ничего не купит в этот момент и снизит производительность. Может ли кто-нибудь предложить способ, которым приложение может быть спроектировано так, чтобы при развертывании в сценарии (1) оно использовало BLL, работающий на сервере приложений, но в (2) или (3), где большинство, если не весь стек, находится на одной машины, WCF можно обойти с помощью более традиционных звонков на BLL?
Логика BLL останется неизменной между всеми сценариями. Как раз в (2) или (3) я хотел бы загрузить DLL BLL в память с прямыми вызовами к ней без необходимости проходить через WCF.
Я очень ценю любые советы сообщества по этому вопросу!