Использование веб-сервиса в качестве интерфейса для слоя доступа к данным в .NET - PullRequest
0 голосов
/ 28 марта 2009

В настоящее время я делаю CRUD проект для школы, и в основном они хотят, чтобы у нас была такая структура (3 проекта):

  • Библиотека классов

    • Содержит всю логику доступа к данным (получение данных из базы данных с помощью LINQ стандарта ADO.NET).
  • Веб-сервис

    • Имея ссылку на библиотеку классов и предлагая [WebMethod], которые обращаются к методам из библиотеки классов
  • Веб-сайт ASP.NET

    • Наличие ссылки на службу для веб-службы и использование WebMethods для извлечения данных

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

Website
       \
        \
         Web Service
                    \
                     \
                      Class Library

Теперь, конечно, есть несколько решений на выбор, чтобы обеспечить абстракцию в веб-сервисе для разделения, например, методов, которые извлекают статьи, и методов для извлечения категорий (которые являются двумя разными записями и имеют два отдельных класса в классе). libary):

  • Я могу сделать либо один веб-сервис, который будет иметь все методы (GetAllArticles, GetAllCategories, GetArticleByID и т. Д.), И веб-сайт ссылается только на этот один веб-сервис. Но, конечно, это приведет к тому, что все методы будут в одном классе (то есть в одном веб-сервисе)
  • Или я могу создать несколько веб-служб (Articles.asmx, Categories.asmx и т. Д.) И ссылаться на все из них с веб-сайта, а затем вызывать тот, который мне нужен, в зависимости от того, какие данные мне нужно получить.

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

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


Есть ли лучший способ, как я мог бы реализовать эту структуру?

Ответы [ 3 ]

3 голосов
/ 28 марта 2009

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

Имея это в виду, обычно имеет смысл группировать процедуры по степени их взаимосвязи. Если вы можете разделить все возможные подпрограммы, скажем, на три чистые группы, практически не перекрывая друг друга, то имеет смысл иметь три службы. Если вы не можете четко разделить какие-либо из своих подпрограмм, вам следует ограничиться одним веб-сервисом.

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

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

0 голосов
/ 30 апреля 2009

Почему бы не использовать ADO.Net Data Service?

0 голосов
/ 28 марта 2009

Я бы поместил все веб-методы в один класс. Веб-методы должны быть только обертками вокруг ваших бизнес-классов плюс любые необходимые вам входная проверка и авторизация.

Поскольку веб-сервисы обычно используются машинами, а не людьми, нет острой необходимости в иерархии. Управление URL-адресами и веб-сервером может стать бременем, если вы создадите класс веб-метода для бизнес-класса.

Если вы планируете использовать HTML-страницу, автоматически генерируемую браузерами, для вызова ваших веб-сервисов в качестве основного пользовательского интерфейса, вам нужно быть немного осторожнее. Например, вы не сможете полагаться на заголовки SOAP, если вам нужно аутентифицировать запросы.

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