WCF Сервис и Бизнес Логика - PullRequest
8 голосов
/ 05 декабря 2011

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

Должна ли моя бизнес-логика перейти в метод обслуживания

public User GetUser(int id)
{  
     //Retrieve the user from a repository and perform business logic
     return user;
}

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

public User GetUser(int id)
{  
     return _userLogic.GetUser(id);
}

Ответы [ 5 ]

8 голосов
/ 05 декабря 2011

Мое личное предпочтение - иметь WCF как очень тонкий слой поверх отдельного бизнес-уровня.Уровень WCF делает только вызовы на бизнес-уровне, аналогично тому, что вы показали в варианте 2. Это дает вам некоторую гибкость в том случае, если вы хотите, чтобы ваш бизнес-уровень использовался чем-то другим, чем клиенты WCF (например,приложение WPF, вызывающее ваш бизнес-уровень напрямую, а не через WCF.

2 голосов
/ 05 декабря 2011

Я думаю, что решение зависит от потребностей вашего бизнеса. WCF - это механизм для передачи данных (объектов) между сервером и клиентом. Если вам нравится, что ваша логика businsess работает на сервере, вы должны позволить WCF выставить объект после запуска вашей бизнес-логики.

2 голосов
/ 05 декабря 2011

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

Даже тогда, если выв конечном итоге, разделив вашу функциональность на более мелкие классы, неплохо было бы разместить эти классы как сервисы WCF.Затем вы можете использовать их in-proc (через каналы), когда это необходимо, или через границы машин (tcp), или даже как веб-сервисы.Создавайте фасады по мере необходимости, чтобы обеспечить доступ к функциональности других, более мелких служб.

Нет реальной необходимости избегать использования какой-либо логики в классах обслуживания WCF.

1 голос
/ 05 декабря 2011

Это должно идти в отдельном наборе классов. Ваш уровень WCF должен содержать только логику, которая напрямую относится к тому, как доставляется продукт услуги.

В вашем случае, я вижу, что у вас есть метод WCF, который возвращает User (я полагаю, что это пользовательский класс), почему есть отдельный метод для возврата UserID вместо заполнения этого свойства как части возврата объекта User?

0 голосов
/ 05 декабря 2011

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

...