将数据从客户端传递到wcf服务到域层

时间:2015-03-13 20:10:55

标签: c# web-services wcf design-patterns

我希望消费者应用程序将一些数据结构发送到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服务属性并不是一件好事。

我可以使用任何设计模式来实现这一目标吗?

1 个答案:

答案 0 :(得分:0)

此问题的最佳解决方案是使用这样的适配器模式。 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;
    }
}