WCF и Fluent NHibernate: как я могу держать "чистые" классы? - PullRequest
3 голосов
/ 26 мая 2009

Я исследую Nhibernate, jquery и WCF одновременно для внутреннего проекта, и мне было интересно, почему у меня не может быть "чистых" классов данных.

Из того, что я прочитал, очень хороший момент в мире nhibernate заключается в том, что мой бизнес-класс не будет связан с фреймворком. У меня не будет

<SaveInTable("Thingie")> _
Public Class Thingie
    <ColumnName("ThingieId")> _
    Public Property Id as Integer
    ' accessors
End Class

а что-то вроде

Public Class Thingie
Public Property Id as Integer
' etc

А потом

Public Class ThingieMapping
Inherits ClassMap(Of Thingie)
' etc, omitted for brevity's sake

Что я не понимаю, так это то, что если я хочу перечислить Thingie s на веб-странице с jQuery , и если я хочу использовать веб-сервисы WCF с jquery (это выглядит как текущая тенденция из того, что я видел в различных уроках), мне приходится добавлять атрибуты DataContract и DataMember в мой класс Thingie .
С другой стороны, классические веб-сервисы ASMX не будут беспокоить меня и позволят мне получить класс Thingie , не беспокоясь о добавлении атрибутов.

У меня такое ощущение, что мне не хватает части картины здесь; кажется логичным попытаться сохранить класс Thingie в основном независимым, но я пока не нашел примеров.

Итак, я должен отказаться от всех надежд и придерживаться классических веб-сервисов, или есть способ получить мой торт WCF и съесть его тоже?

1 Ответ

3 голосов
/ 27 мая 2009

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

Это, конечно, означает, что вы должны каким-то образом сопоставить свои доменные классы с DTO и наоборот. Если отображение тривиально (+ некоторые другие случаи, которые удовлетворяют некоторым соглашениям), вы можете использовать AutoMapper для этого.

Использование DTO имеет ряд преимуществ, лучшее из которых заключается в том, что у вас есть четкое разделение проблем - ваша модель домена с привязкой NHibernate предназначена для моделирования вещей в вашем домене, а ваши DTO - для отправки данных по проводам. Затем, если одно изменится, другому тоже не обязательно будет меняться.

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