На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> архитектура клиент серверного приложения с толстым клиентом
    Приветствую, товарищи программисты!
    Необходимо реализовать клиент-серверное приложение с толстым клиентом.
    Клиент и сервер будут обмениваться данными с помощью WCF. Возникают 2 вопроса.

    Вопрос 1. Если архитектуру приложения разбить на следующие 3 слоя: View, BLL (бизнесс логика), DAL (уровень доступа к данным), то как будет выглядеть архитектура клиента и сервера?
    У меня два варианта [клиент] интернет [сервер]:
    1). [View<->BLL<->ClientDAL] интернет [ServerDAL<->БД]
    2). [View<->ClientBLL] интернет [ServerBLL<->DAL<->БД]
    т.е. вопрос сводится к тому, гду будет располежена реализация бизнес логики - на клиенте или на сервере?
    Первый вариант кажется не очень безопасным, т.к. код проверки полномочий будет расположен на стороне клиента (в BLL).
    Во втором варианте клиент, как мне кажется, не является толстым клиентом.

    Вопрос 2.
    DAL я представляю в виде набора классов для работы с конкретными таблицами БД. Получается что для каждого такого класса нужен свой wcf сервис? Или есть другие подходы к организации доступа к данным с помощью WCF (в wcf я новичок).

    Что скажите, господа?
      Я бы оформил DAL чуть сложнее - вынес бы из BLL все основные понятия, которыми она оперирует (не таблички, а сущности, которые в них хранятся). И именно этот слой и оставил бы на сервере: оперирование высокороувневыми сущностями: ПолучитьСписокВсехПользователей, ДобавитьПользователя, и т.д. При этом, принимая в каждый метод на вход токен аутентификации, на основе которого сервер бы понимал, что это за пользователь и применял бы правила безопасности.
      А на клиента водрузил бы манипулирование этими высокоуровневыми сущностями (бизнес-правила) и представление.
        Цитата deil @
        Я бы оформил DAL чуть сложнее - вынес бы из BLL все основные понятия, которыми она оперирует (не таблички, а сущности, которые в них хранятся). И именно этот слой и оставил бы на сервере: оперирование высокороувневыми сущностями: ПолучитьСписокВсехПользователей, ДобавитьПользователя, и т.д. При этом, принимая в каждый метод на вход токен аутентификации, на основе которого сервер бы понимал, что это за пользователь и применял бы правила безопасности.
        А на клиента водрузил бы манипулирование этими высокоуровневыми сущностями (бизнес-правила) и представление.

        Если приблизиться к реализации, то это будет выглядеть следующим образом:
        Есть dll (назовем Entity.dll), в которой определены высокоуровневые сущности (Employee, итп). Она должна быть расположена на стороне клиента и на стороне сервера. DAL будет иметь классы соответствующие сущностям в Entity.dll, каждый из которых содержать методы типа: ПолучитьСписок, ПолучитьКонкретныйЭкземпляр, Добавить, Обновить и т.п.
        BLL, в свою очередь, располагается на клиенте и работает с высокоуровневыми сущностями.
        Проверка полномочий на выполнение той или иной операции можеть быть сложной и по логике должна располагаться в BLL или я не прав?

        Приведу пример проверки полномочий:
        Пользователи: механики, энергетики и т.п.
        Операция - Создание Единицы Оборудования (ЕО).
        Правила: пользователь может создавать ЕО только для своего производства,
        механик может создавть ЕО только типа M,
        энергетик только типа E.

        Безопасно ли это располагать на стороне клиента?
        Или лучше вынести на сторону сервера, что, на мой взгляд, означает вынесение BLL на сторону сервера (или наделение DAL логикой).
          Проверку прав необходимо делать на стороне сервера. Иначе я напишу альтернативный клиент, игнорирующий все ограничения и наворочу дел :)
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0185 ]   [ 16 queries used ]   [ Generated: 28.03.24, 09:56 GMT ]