我正在调查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
我不明白的是,如果我想在 jQuery 的网页中列出 Thingie ,并且我想在jquery中使用WCF webservices(它看起来像我在各种教程中看到的当前趋势),我发现自己必须将 DataContract 和 DataMember 属性添加到我的 Thingie 班。
另一方面,经典的ASMX webservices不会打扰我,让我检索 Thingie 类而不用担心添加属性。
我觉得我在这里错过了部分图片;尝试保持 Thingie 类几乎是独立的似乎是合乎逻辑的,但到目前为止我还没有找到示例。
那么,我是否必须放弃所有的希望并坚持使用经典的网络服务,或者有办法让我的WCF蛋糕也吃掉它?
答案 0 :(得分:3)
我建议您使用DTO通过电线发送 - 然后您可以使用必要的属性装饰DTO。
这当然意味着您必须以某种方式将您的域类映射到DTO,反之亦然。如果映射是微不足道的(+其他一些满足某些约定的情况),则可以使用AutoMapper。
使用DTO有几个好处,最好的是你有明确的关注点 - 你的NHibernate映射域模型是关于你域中的东西建模,你的DTO是通过网络发送数据。然后,如果一个改变,另一个也不一定需要改变。