Мы разрабатываем «промежуточный уровень» для замены существующего уровня бизнес-логики / доступа к данным. Одна из проблем проектирования, с которой мы сталкиваемся, заключается в том, что нам необходимо разработать ее таким образом, чтобы позволить базам данных нескольких клиентов и / или компонентам среднего уровня жить на одном сервере как часть нашего размещенного предложения. Схема базы данных и настройка для размещенной среды на этом этапе довольно четко изложены, поскольку она уже находится в производстве. По сути, на данном сервере БД в размещенной среде каждый клиент имеет экземпляр SQL Server, который именуется с использованием уникального идентификатора клиента.
Мы пытаемся решить, следует ли иметь отдельный путь на всем пути от клиентского приложения через веб-службу, бизнес-логику и доступ к данным для базы данных для каждого клиента или иметь один общий экземпляр каждая часть, где уровень доступа к данным отвечает за получение данных из правильного экземпляра SQL Server или где-то между этими двумя. С одним общим путем для всего, если какой-то один кусок выходит из строя, все клиенты, обращающиеся к нему, мертвы в воде. С другой стороны, с индивидуальными путями для каждого клиента, есть (на первый взгляд) что-то еще, кроме, возможно, слишком сложного? Вот ужасная художественная картина ASCII двух рассматриваемых нами вариантов:
[Client]--| |--[DB]
[Client]--| |--[DB]
|--> [Web Service] --> [Business Logic] --> [Data Access] ----|
[Client]--| |--[DB]
[Client]--| |--[DB]
Или это:
[Client] --> [Web Service] --> [Business Logic] --> [Data Access] --> [DB]
[Client] --> [Web Service] --> [Business Logic] --> [Data Access] --> [DB]
[Client] --> [Web Service] --> [Business Logic] --> [Data Access] --> [DB]
[Client] --> [Web Service] --> [Business Logic] --> [Data Access] --> [DB]
Какой из них (или какой промежуточный вариант) будет лучше и почему?