【问题标题】:How to avoid implementing methods repeatedly for identical classes?如何避免为相同的类重复实现方法?
【发布时间】:2015-12-18 15:03:03
【问题描述】:

我正在调用 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 是新 URL 处的网络服务。

但是,我不想在声明 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 时都编写一个扩展的包装类来自不同 URL 的服务?

【问题讨论】:

  • 那么您的代码中标题中的错误消息究竟是从哪里得到的?
  • @steve,标题来自我在发布之前解决的另一个问题,我发布此问题时忘记更改它。我现在就改。
  • @juharr,请参阅我对史蒂夫评论的回复。

标签: c# web-services sharepoint interface


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 2019-02-26
    相关资源
    最近更新 更多