MVC Repository Pattern / Веб-сервисы SoC Вопрос - PullRequest
0 голосов
/ 26 августа 2010

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

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

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 26 августа 2010

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

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

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

0 голосов
/ 26 августа 2010

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

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

Репозиторий (веб-службы) -> Службы (бизнес-уровень) -> Уровень представления (контроллеры)

...