Шаблон репозитория MVC 3 через SOAP - PullRequest
2 голосов
/ 21 ноября 2011

признателен за любую помощь в этом.

В настоящее время мы работаем над реконструкцией устаревшего проекта, который сейчас направлен на то, чтобы быть слишком большим кошмаром для обслуживания.Итак, мы решили должным образом нормализовать структуру данных и использовать разработку Entity Framework 4 Code First в проекте MVC 3 с использованием шаблона репозитория.Проблема, с которой мы сталкиваемся в настоящий момент, заключается в том, что устаревшее приложение по соображениям безопасности размещается на сервере за пределами нашей основной инфраструктуры - поэтому все операции CRUD выполняются через веб-службы, поэтому нет прямой строки подключения к базе данных MS SQL.

Мое «предлагаемое» решение состоит в том, чтобы определить мои контракты с репозиторием, во время разработки будет прямое соединение с базой данных, но после развертывания не будет (может быть возможность получить это изменение позже).Итак, было бы разумно предоставить мне две конкретные версии репозитория, работающие с одним и тем же контрактом.Одна, которая использует LINQ для выполнения операций CRUD (разработка и, возможно, инфраструктура, к которой мы можем перейти позже), и другая версия, использующая SOAP для передачи объектов (это будет означать, что мои POCO должны быть определены как Serializable) и таким образом выполнять операции CRUD.?

Это звучит выполнимо или есть гораздо лучший способ достичь этого?

Спасибо!

1 Ответ

1 голос
/ 21 ноября 2011

Если вы отвечаете за разработку как клиентской, так и сервисной части, вы можете использовать простой подход:

  • Использовать некоторый общий интерфейс для репозитория и сервисного клиента
  • При работе с удаленным репозиториемв клиенте службы инъекций - сервис будет использовать реализацию репозитория напрямую
  • При работе с локальным репозиторием непосредственно в клиентском репозитории инъекций

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

Кстати.не очень часто размещать хранилище за веб-сервисом.Более распространенным является размещение целого уровня сервиса / бизнес-логики позади веб-сервиса.

...