До SOA, N- или 3-уровневые архитектуры обычно имели выделенный бизнес-уровень.Если вы чувствуете себя достаточно твердо в отношении разделения интересов (или если вы думаете, что вы можете получить некоторое повторное использование своих бизнес-функций от не-сервисных потребителей), почему бы не вывести свою бизнес-логику из уровня обслуживания?(но не помещайте бизнес-логику в свой DAL)
Однако, если ваш сервисный уровень предлагает сервисы запросов данных, а также транзакционные, тогда бизнес-уровень не нужен для этих сервисов - посмотритев шаблонах проектирования типов CQRS здесь.
Если вам нужно контролировать формат XML ваших сущностей (Names, xmlns и т. д.), вам, вероятно, понадобится создавать собственные сущности WCF DataContract или MessageContract.Однако, если вам все равно, как выглядят данные по сети, вы можете просто использовать классы EF Entity (если они не привязаны к контексту, то есть если использовать POCO с EF).Если вы не приписываете POCO с помощью DataContract и т. Д., Поведение DataContractSerializer по умолчанию заключается в сериализации открытых свойств.
Таким образом, вы можете получить следующие «слои» сборки (снизу вверх)
- Объекты DAL для EF (привязаны к ObjectContext или POCO)
- EF DAL
- Бизнес-уровень (только для методов транзакционного обслуживания - обойдено для запросов)
- Возможно разделитьОбъекты WCF, где вы сопоставляете свои POCO / DAL BE с DataContract / MessageContract
- Сервисный уровень WCF