Упростите два Получите очень похожие веб-сервисы - PullRequest
0 голосов
/ 12 июня 2018

Я создаю некоторые веб-сервисы в Svc (не WebApi), и мне нужно написать два разных метода (+ интерфейсы), чтобы делать похожие вещи:

  1. Список заказов по используемой компаниив отфильтрованном меню:

    / orders / list? companycode = {companyCode}

  2. Список заказов по компаниям и поставщикам, где находятся компания и поставщикТребуется (также по соображениям безопасности. Поставщик связан с пользователем, выполняющим фильтрацию):

    / orders / listbysup? companycode = {companyCode} & suppliercode = {suppliercode}

Можно ли написать только один веб-сервис, используя что-то вроде необязательных / обязательных параметров?

Теперь я использую два разных метода: list vs listbysup.

Может быть, я могу использовать и другой параметр в качестве фильтра "mode".

Я также могу использовать что-то вроде

var mode = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters["mode"];

1 Ответ

0 голосов
/ 12 июня 2018

Да, это вполне возможно, и это будет зависеть от того, что вы вернетесь.Если результат точно такой же, но метод 2, который вы передаете в коде поставщика как filter, тогда не будет никакой разницы.Быстрая проверка, если строка запроса list?companycode={companyCode} не содержит &suppliercode, говорит методу, что нужно возвращать список только для балансовой единицы без фильтрации.

Однако, если результаты отличаются, вы нарушитеS -> Single Responsibility в SOLID принципалах.Метод должен иметь одну цель и одну цель.Вы можете написать код, который будет возвращать разные результаты в одном методе, но это было бы не идеально, создавая ненужный технический долг.Также может оказаться трудным создание тестов для сложных методов.Наличие более одного метода с одной целью делает его чистым и простым в обслуживании.

...