将数据从客户端传递到wcf服务到域层
我希望消费者应用程序向wcf服务发送一些数据结构,然后此服务将数据传递给业务模型对象。将数据从客户端传递到wcf服务到域层
我想避免需要手动将服务数据对象的每个属性复制到新的业务对象。
例如:
[DataContract]
public class MyServiceData
{
[DataMember]
public Property1() { get; set;}
[DataMember]
public Property2() { get; set;}
[DataMember]
public Property3() { get; set;}
}
public class MyWcfService : IMyWcfService
{
public void Operation1(MyServiceData data)
{
var obj = new DomainObject();
obj.Property1 = data.Property1;
obj.Property2 = data.Property2;
obj.Property3 = data.Property3;
obj.DoSomething();
}
}
我可以把MyServiceData类业务对象层中,但我不认为它是使用一个业务模型对象这些WCF服务属性,是一件好事。
有什么设计模式可以用来实现这个吗?
此问题的最佳解决方案是使用这样的适配器模式。 http://en.wikipedia.org/wiki/Adapter_pattern
下面是一个简单的实现:
public class MyDomainObject
{
public string MyProperty { get; set; }
}
[DataContract]
public class MyDomainObjectWcfAdapter
{
private readonly MyDomainObject _object;
public MyDomainObjectWcfAdapter(MyDomainObject obj)
{
this._object = obj;
}
[DataMember]
public string MyProperty
{
get { return this._object.MyProperty; }
set { this._object.MyProperty = value; }
}
public MyDomainObject GetObject()
{
return this._object;
}
}
当某些属性也是自定义类型从ws层复制到业务层时,此解决方案似乎过于复杂 – Jonathan 2015-03-18 13:49:38
总体而言,我同意你的看法。这是使用框架的固有缺点之一......你受它的限制。有时候这会使某些解决方案变得复杂http://tomasp.net/blog/2015/library-frameworks/index.html – 2015-03-18 16:00:43
您是否尝试过使用一个映射到移动这样的简单结构/模型之间的数据? – 2015-03-13 20:17:10
但是用mapper这个副本还是会发生的吧? 不是一个好主意,保持跨层数据对象的相同的引用? 这也会避免每次添加新属性时修改复制代码 – Jonathan 2015-03-13 21:28:30
这会发生,是正确的。但是Mapper使它更简单(在你的例子中4行代码)。你是正确的,一个纯粹的域模型不应该有WCF标签。如果你想要纯图层,那么需要在某个地方进行映射。 – 2015-03-13 23:04:48