2010-01-11 86 views
1

我们目前有几个WCF服务直接通过线路公开我们的域模型。换句话说,我们没有一层DTO来映射我们的域和服务层。我别无选择,只能用[DataContract]和[DataMember]直接修饰我们的域对象。我想在线上公开的所有域对象上实现IExtensibleDataObject。有没有人看到在基类上实现IExtensibleDataObject有什么问题?因此,我将有:提前在基类上实现IExtensibleDataObject

+1

你的代码应该工作得很好。事实上,如果您查看由svcutil生成的代码,您会看到与您的代码看起来很像的代码。看看这个链接的更多信息: http://msdn.microsoft.com/en-us/library/system.runtime.serialization.iextensibledataobject.aspx – Kwal 2010-01-12 01:56:42

回答

1

感谢马特

[DataContract] 
public EntityBase:IExtensibleDataObject{///IExtensibleDataObject Impl} 

[DataContract] 
public Person:EntityBase{} 

[DataContract] 
public Employee:Person{} 

感谢。我想我知道它可以正常工作,但我的问题与SOA设计更相关。我在OO世界知道这很好,但是因为我的域对象也是DTO,所以我担心增加这个继承链会导致问题的发生。是否有其他人实现IExtensibleDataObject?如果是这样,你是在所有的datacontracts还是在基类上实现IExtensibleDataObject?

+0

我误解了你的问题,我的歉意。从纯粹的SOA角度来看,像IExtensibleDataObject这样的机制是不可取的,因为它可以从合约的角度掩盖事情。话虽如此,我认为这个想法是方便的。这是一个很好的帖子,其中包含专业人员(帖子本身)和缺点(第一条评论):http://bloggingabout.net/blogs/vagif/archive/2009/03/29/iextensibledataobject-is-not-only - 用于后向compatibility.aspx – Kwal 2010-01-15 04:07:29