如何避免为相同的类重复实现方法?

时间:2015-09-21 19:40:23

标签: c# web-services sharepoint interface

我正在调用Sharepoint 2007 Lists网络服务:

class ListUpdater
{
    public void update(ListWS.Lists listService,XmlNode xNode)
    {
        listService.UpdateListItems("myListName", xNode);
    }
}

因为我们正在迁移到Sharepoint 2013,所以我需要将此方法更改为:

class ListUpdater
{
    public void update(ListWS_2013QA.Lists listService,XmlNode xNode)
    {
        listService.UpdateListItems("myListName", xNode);
    }
}

其中ListWS_2013QA是新网址的网络服务。

但是,我不想在声明Web服务实例的任何地方改变它,特别是如果我可能需要在应用程序的生命周期内多次更改Web服务。我正在考虑使用接口IListService,以便我可以将方法重写为:

class ListUpdater
{
    public void update(IListService listService,XmlNode xNode)
    {
        listService.UpdateListItems("myListName", xNode);
    }
}

但是对于每个版本的Web服务,我都必须使用包装器来实现该接口,该包装器实现我在代码中使用的Lists的每个方法,如下所示:

class ListsWrapper_2013QA:IListService
{
    ListWS_2013QA.Lists listService;

    public XmlNode DoSomething(string listName, XmlNode listProperties, XmlNode newFields, XmlNode updateFields, XmlNode deleteFields, string listVersion)
    {
        return listService.UpdateList(listName, listProperties, newFields, updateFields, deleteFields, listVersion);
    }

    public XmlNode UpdateListItems(string listName, XmlNode updates)
    {
        return listService.UpdateListItems(listName, updates);
    }
}

有什么方法可以利用ListWS.ListsListWS_2013QA已经有相同方法的事实,所以我不必每次都想写一个广泛的包装类使用来自其他网址的Lists服务?

1 个答案:

答案 0 :(得分:0)

您可以创建一个继承IListService的类,并将其用作ListWrapper类的基类。