Использование доступа к данным WCF и уровня бизнес-логики - PullRequest
1 голос
/ 21 августа 2011

Мы начинаем разработку веб-приложения, которое впоследствии будет также перенесено на мобильные устройства. Так что я думал о инкапсуляции доступа к данным и бизнес-логики в слой WCF. Это упростит синхронизацию и управление этим позже.

Уровень доступа к данным будет состоять из уровня репозитория над ORM (Codesmith - PLINQO). Приложение является мультитенантным (SaaS) и использует подход с общей базой данных.

WCF и веб-приложение будут находиться на одном сервере, и привязка WCF будет именованной трубкой.

Является ли вышеуказанный подход корректным или может быть некоторый удар по производительности при использовании слоя WCF? Любой совет или читаемый материал для лучшего структурирования приложения также приветствуется.

1 Ответ

2 голосов
/ 21 августа 2011

Это зависит от остальных ваших требований. Связь по именованным каналам всегда снижает производительность. Вы можете просто сделать несколько тестов для непосредственного вызова операции и вызова операции через именованный канал, чтобы получить некоторые числа для сравнения. Существуют альтернативы именованным каналам для размещения службы в процессе вместо другого процесса - нулевой канал или локальный канал , но даже эти решения будут все еще медленнее, чем прямой вызов.

Вы планируете свою архитектуру на будущее, поэтому теперь вы должны определить, что значит и будущее. Как мобильные устройства будут использовать ваши услуги? Это будет МЫЛО или ОТДЫХ? Это два разных подхода, и вы можете обнаружить, что сервисы, которые вы подготовили для своего веб-приложения (SOAP), не очень полезны для мобильных устройств (где вы можете использовать REST, потому что он лучше поддерживается и более популярен).

Если вы не знаете, что означает будущее, нет смысла делать какие-либо приготовления, потому что вы, скорее всего, будете готовиться к тому, чего не произойдет = ваши текущие усилия будут потрачены впустую, и вам в любом случае придется изменить приложение позже .

Использование одних и тех же служб для вашего приложения (= внутренняя служба) и для мобильных устройств (= внешняя служба) может иметь разные требования безопасности. Например, ваше веб-приложение уже может обрабатывать авторизацию, но для мобильных устройств авторизация должна выполняться на сервисах. Авторизация является глобальной для службы, поэтому для вашего веб-приложения вы будете выполнять авторизацию дважды.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...