2012-01-16 7 views
1

Мы имеем слоистое применение:DataContract определения на общих классах

UI < -> WCF < -> DAL (Использование рамка сущности)

Мы не хотим подвергать наши EntityTypes, поэтому мы конвертируем в пользовательские DTO в DAL. Типы DTO ссылаются на решения UI, WCF и DAL.

Несколько вопросов были подняты -

  • Существуют ли какие-либо негативные последствия добавления [DataContract] и [DataMember] атрибуты для всех наших пользовательских типов DTO и свойства?
  • Может возникнуть проблема в приложениях, которые не хотят получать доступ к данным через WCF?
+0

Почему вы используете WCF между вашим пользовательским интерфейсом и DAL? –

+0

Мы должны обработать кучу бизнес-логики. Полный стек слоев будет: UI -> WCF -> BL -> DAL -> DB. –

+0

Так что мой вопрос в том, зачем вообще вводить слой WCF. Является ли пользовательский интерфейс удаленным от бизнес-уровня? –

ответ

2

Нет и нет. Эти атрибуты являются частью механизма, который WCF использует для создания и обеспечения соблюдения вашего контракта с webservice и определения того, что сериализуется по проводу или нет.

+0

Ну технически эти атрибуты используются DataContractSerializer, который используется WCF. Однако для использования сериализации вам не нужно использовать WCF. – cadrell0

+0

Если вы открываете wsdl из службы WCF, атрибуты datacontract и datamember будут влиять на выведенную схему. Таким образом, выходные данные этих атрибутов также относятся к потребителям, не использующим wcf, - если они зависят от wsdl для создания прокси. –

0

Атрибуты вставляются в метаданные и находятся там до тех пор, пока какой-либо код пользователя не попросит их использовать отражение. Они не имеют каких-либо последствий для производительности, единственное, что они увеличивают таблицы метаданных сборки. Но это скорее проблема дизайна, вы, как правило, не должны были впадать в этот сценарий. Если вы украшаете какой-либо класс атрибутом agnostic платформы, например [Serializable], тогда вы скажете «ОК, этот тип может быть сериализован один день, независимо от того, как и где вы хотите его использовать». И это очень хорошо, но если вы украсите тот же класс с помощью специфичного для платформы атрибута, такого как [DataContract], то вы любезно говорите миру, что «ОК, это WCF DTO и предназначен для использования в контрактах на работу», , Кроме того, вы связываете класс с DataContractSerializer и даже больше, если используете DataContract, тогда вы должны явно определить [DataMember] s.

Заключение - вы, как правило, не должны были идти этим путем. Подумайте о реорганизации вашей модели программного обеспечения.

Смежные вопросы