У меня есть WCF-слой, и моя модель домена находится за этим слоем WCF. Я использую Nhibernate как инструмент ORM, и вся моя бизнес-логика/Data Access и т.д. Будут за этим слоем WCF.
Я подвергаю DTO своим клиентам. У меня есть вопросы
1) Должен ли я создавать DTO? есть ли какой-либо вред в экспонировании объектов непосредственно клиенту wcf, поскольку мои сущности также будут иметь методы бизнес-логики, поэтому я должен был бы повредить свой объект entitiy с атрибутами WCF, которые, я думаю, не хороши?
2) Если я выставить DTO, я должен проверять DTO, а также Entity. Если я проверяю только DTO, то я не предоставляю никаких входных проверок для моего объекта Enitity. это нормально?
3) Должен ли я рассмотреть возможность проверки DTO на уровне Application Service (уровень WCF) с помощью проверки схемы? или Я должен использовать подход IValidator, приведенный в статье [blog]: http://lostechies.com/jimmybogard/2007/10/24/entity-validation-with-visitors-and-extension-methods/, как показано Джимми Богардом
Наличие DTO порой кажется излишним для меня, но я могу использовать его в деталях клуба из одного или нескольких объектов.
Я бы разоблачил эту услугу для разных клиентов, и, таким образом, мой DTO будет извлекаться из некоторого базового dto с данными учетных данных, которые я бы проверял для каждого входящего запроса до моего фактического вызова метода wcf (возможно, используя IEndpointBehaviour и IParamInspector)
Изменить
Основываясь на ответе, я сейчас соглашусь сохранить слой DTO. Вот пример, чтобы сценарий стал более явным.
Скажем, у меня есть метод CreateCustomer, который принимает CustomerDetailsDTO на моем уровне службы приложений WCF, который может быть вызван приложением MVC. Существуют некоторые входные проверки, такие как
Входные проверки:
i)Name length should be greater than 2 but less than 50 ii) Age is mandatory and cann not be less than 18 (Different other field validations)etc
Бизнес-проверки:
There could then be some business rules to check for dupliate customer
based on say email or some other factor whcih i think should be part of
my Domain business logic and should reside in CustomerEntity class.
Если входная проверка применяется только на уровне интерфейса службы, поскольку мы получаем DTO от клиента или он также должен применяться к CustomerEntity