2010-08-26 6 views
0

Я новичок в ASP.NET MVC, и я пытаюсь внедрить лучшие практики для приложения малого и среднего размера, которое использует веб-службу в качестве источника данных. Веб-сервис предоставляет следующие методы для поддержки приложения:MVC Repository Pattern/Web Services SoC Question

  1. AuthenticateCustomer - возвращает идентификатор клиента, если действительный адрес электронной почты/пароль
  2. GetCustomer - возвращает упорядоченный объект, содержащий информацию о клиентах
  3. Etc

Мой вопрос: все эти службы возвращают значения Success (bool) и Message (string) в зависимости от результата операции. Сообщение содержит описательную информацию, если произошла ошибка. Я не уверен, что вызов веб-служб принадлежит уровню репозитория, но я думаю, что важно иметь возможность передавать значения «Успех и сообщение» через уровни «Репозиторий -> Сервис ->». Единственный способ, которым я могу думать делать это либо засорение Repository методы с амбулаторными аргументами:

public int AuthenticateCustomer(string Email, string Password, out bool Success, out bool Message); 

или создать какое-то оболочка, которая содержит намеченное возвращаемое значение (целое число), и успех и ценность сообщений. Тем не менее, каждый метод веб-службы возвращает разные значения, поэтому оболочка одного размера подходит для всех. Кроме того, эти значения должны быть переданы через уровень сервиса, и похоже, что валидация какого-то рода происходит на уровне репозитория.

Любые мысли о том, как выполнить: 1. Разделение проблем (проверки, доступ к данным через веб-службы), а ... 2. Имея возможность поддерживать обратную связь, полученные от веб-службы и передать его через все путь к просмотру?

P.S. - Извините за короткий вопрос. Это немного сложно объяснить с помощью какой-либо краткости.

ответ

0

Вам нужен репозиторий? Из того, что вы описали, я просматриваю веб-службу как репозиторий. Затем я использовал Службы (Бизнес-уровень) для вызова веб-службы и там, где логика обрабатывает ошибки или успех.

Сделайте бизнес-слой конвертируйте объект Customer из веб-службы в бизнес-объект и передайте его контроллерам.

Repository (Web Services) -> Услуги (Business Layer) -> Presentation Layer (контроллеры)

+0

Martin, Ваш ответ имеет смысл. Поскольку я думал об этом, мое приложение не «владеет» данными и не несет ответственности за сохранение данных в постоянном хранилище (этот веб-сервис обрабатывает это), что устраняет необходимость в явном репозитории. Спасибо за ваш вклад. – Ariel

0

ответ Мартина хорошо.

Я мог бы увидеть корпус для тонкого слоя вокруг веб-служб, чтобы облегчить тестирование.

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

+0

Rob, Это проблема, с которой я столкнулся при разработке этого. Я могу выполнить некоторую проверку на уровне службы, но есть бизнес-правила, встроенные в веб-службу, которые я не могу обработать на своем бизнес-уровне. Например, есть услуга, позволяющая клиенту изменить свой логин (адрес электронной почты). Веб-служба подтверждает, что новый логин еще не используется другим клиентом. Важно, чтобы эта обратная связь была улавливана уровнем обслуживания, а затем представлена ​​пользователю. Он «чувствует» себя очень неправильно, но я изо всех сил пытаюсь найти лучший способ справиться с этим. – Ariel