【问题标题】:WCF and Fluent NHibernate: how can i keep "clean" classes?WCF 和 Fluent NHibernate:我怎样才能保持“干净”的课程?
【发布时间】:2009-05-26 15:51:55
【问题描述】:

我正在为一个内部项目同时调查 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 Web 服务(它看起来像我在各种教程中看到的当前趋势),我发现自己必须将 DataContractDataMember 属性添加到我的 Thingie 类。
另一方面,经典的 ASMX 网络服务不会打扰我,让我检索 Thingie 类而无需担心添加属性。

我觉得我在这里遗漏了部分图片;尝试保持 Thingie 类大部分独立似乎是合乎逻辑的,但到目前为止我还没有找到示例。

那么,我是否必须放弃所有希望并坚持经典的网络服务,或者有没有办法让我的 WCF 蛋糕也吃掉?

【问题讨论】:

  • 事实上,昨天我说经典的 web 服务正在运行时,我讲得有点早。我只是没有用 IList 和泛型集合实现方法。碰巧的是,如果我想使用 web 服务,我将不得不从序列化中排除集合,这再次违背了干净类的想法。

标签: wcf nhibernate


【解决方案1】:

我建议您使用 DTO 通过网络发送 - 然后您可以使用必要的属性来装饰 DTO。

当然,这意味着您必须以某种方式将您的域类映射到 DTO,反之亦然。如果映射很简单(+其他一些满足某些约定的情况),您可以使用AutoMapper

使用 DTO 有几个好处,最好的好处是您可以清楚地分离关注点 - 您的 NHibernate 映射域模型是关于对域中的内容进行建模,而您的 DTO 用于通过网络发送数据。那么,如果其中一个发生了变化,另一个也不一定需要改变。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 2015-12-11
    • 1970-01-01
    • 2020-09-25
    • 2012-08-15
    相关资源
    最近更新 更多