Пользовательский интерфейс, бизнес-логический уровень, уровень данных и места размещения веб-сервисов
Мы разрабатываем веб-приложение. Мы хотим, чтобы мы повторно использовали работу, которую мы здесь делаем для другого приложения, которое будет использовать одну и ту же базу данных, и использовать те же бизнес-правила для чтения и записи в указанную базу данных.
Какой дизайн будет более правильным
-
Имея веб-службы вызова пользовательского интерфейса, которые будут использовать бизнес-объекты, содержащие бизнес-логику, которые будут разговаривать с уровнем доступа к данным.
-
В пользовательском интерфейсе используются бизнес-объекты, содержащие бизнес-логику, которые будут вызывать веб-службы, которые затем будут разговаривать с уровнем доступа к данным.
-
Пользовательские бизнес-объекты пользовательского интерфейса, содержащие бизнес-логику, которые будут разговаривать с уровнем доступа к данным.
Ответы
Ответ 1
Не смешивайте логический дизайн с физическим дизайном. Логический дизайн работает над слоями и физическим дизайном - уровнями. Веб-сервис не является слоем. Это просто уровень.
В логическом дизайне есть стандартный подход: слой пользовательского интерфейса → слой BL → DAL
В физическом дизайне все слои могут находиться в одном клиентском приложении, подключающем локальную базу данных, или могут быть распределены по удаленным уровням. Но для распределенных приложений обычно добавляется еще один слой: Application layer, который скрывает связь BL-уровня по проводке.
Ответ 2
Я бы сказал, третий. Я склонен думать о веб-сервисах как о другом уровне презентации.
Подумайте об этом так: у вас есть веб-интерфейс, который вызывает код вашего бизнес-уровня, чтобы делать что-то вроде создания нового пользователя (User.Add), найти все продукты, соответствующие данному описанию (Products.FindByDescription) и т.д..
Теперь вы можете повторно использовать тот же код бизнес-уровня для создания набора общедоступных веб-сервисов для сторонних сторон. Может быть метод, который добавляет пользователя - который вызывает ваш внутренний метод User.Add(), другой - для поиска продуктов и т.д.
То, что вы получаете, представляет собой параллельный набор презентаций/интерфейсов для одних и тех же базовых данных и бизнес-логики.
За кулисами (полностью вне сферы действия веб-сервисов или слоев пользовательского интерфейса) бизнес-уровень вызывает уровень доступа к данным, который заботится о физическом запросе базы данных. Если бы вы перешли на другую СУБД, вы должны идеально (и теоретически) иметь возможность перестроить слой данных для новой базы данных и все просто работать.
Ваш бизнес-уровень содержит такие правила, как имя пользователя должно быть от 4 до 15 символов; пользователям разрешено искать и загружать товары, находящиеся в магазине, к которому у них есть доступ; и др.
Если вы решите изменить бизнес-правило - например, пользователю разрешено искать продукты в любом магазине в их состоянии, - тогда вы меняете его в одном месте и не должны касаться веб-службы или пользовательского интерфейса, чтобы сделать он работает.
Ответ 3
С точки зрения дизайна, который является "правильным" или нет, на самом деле невозможно дать 100% ответ на правильность дизайна без полного контекста. Каковы требования (функциональные и нефункциональные)? Какие цели дизайна вы хотите выполнить? Насколько важна каждая цель?
Единственная цель, которую ваш вопрос упоминает, заключается в том, что вы хотите повторно использовать бизнес-логику с другим приложением. Когда я хочу повторно использовать бизнес-логику приложения стандартным способом, я выбираю веб-службы. Поэтому, основываясь исключительно на вашем одном требовании, я бы сказал, что вариант 1 (UI- > Web Service- > Business Layer- > Data Layer) является хорошим выбором.
Ответ 4
Логически, веб-службы относятся к слою пользовательского интерфейса. Подумайте, что "Пользователь" является не только человеческой, но и другой системой, и это становится ясным. Поддержание строгого разделения проблем между этими логическими слоями позволит вам легко реализовать и поддерживать ваше приложение.
Ответ 5
Из вашего описания вы не указали причину, по которой вам потребуется использовать уровень веб-сервиса. Предполагая, что ваша база данных доступна вашей системе пользовательского интерфейса, то есть внутри той же сети за вашим брандмауэром, базовый уровень бизнес-объекта, который будет использоваться вашим пользовательским интерфейсом вашего веб-сайта (на стороне сервера, я предполагаю), соответствует вашим требованиям.
Принесите уровень веб-сервиса, когда расстояние между вашей системой пользовательского интерфейса и вашим уровнем данных начнет пересекать границы, которые начнут сталкиваться с уровнем доступа к данным или уровнем бизнес-логики.
Ответ 6
Отъезд: http://www.icemanind.com/layergen.aspx
То, как это должно произойти, заключается в том, что у вас есть свой слой пользовательского интерфейса сверху, слой данных внизу и ваш бизнес-уровень между ними. Каждый слой может взаимодействовать только со слоем под ним. Таким образом, пользовательский интерфейс взаимодействует только с бизнес-слоем... бизнес-уровень говорит только о слое данных. Ваш пользовательский интерфейс никогда не должен разговаривать с уровнем данных, и ваш уровень данных никогда не должен взаимодействовать с вашим пользовательским интерфейсом.
Если у вас нет причин использовать веб-сервис, я бы этого не сделал.
Ответ 7
Вы слышите что-нибудь о слое сервиса? Я думаю, что вы можете использовать сервисный уровень для своих транзакций и операций, а использование фасадного слоя позволяет вам напрямую или косвенно изолировать и управлять доступом из пользовательского интерфейса к уровню доступа к данным после посещения бизнес-уровня. это зависит от ваших требований.