Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:WCF接口实现另一个接口以公开方法_C#_Interface - Fatal编程技术网

C#:WCF接口实现另一个接口以公开方法

C#:WCF接口实现另一个接口以公开方法,c#,interface,C#,Interface,我有另一个问题与此有关,所以请阅读它,如果你需要任何进一步的细节。这是一个与另一个问题的一个要素有关的更具体的问题。我有一个描述dao的接口。此接口由另一个接口实现,该接口将是wcf服务的接口。原因是父接口中的所有函数都需要通过wcf接口公开。父接口不包含wcf属性,因为它不需要这些属性。子接口需要wcf属性才能用作wcf接口。wcf接口最终可能包含更多不在父接口中的方法。有两种方法可以在子接口上获得这些属性,如下所示: 用属性装饰父接口方法 在子接口中重写父接口中的所有方法,然后用属性装饰这些

我有另一个问题与此有关,所以请阅读它,如果你需要任何进一步的细节。这是一个与另一个问题的一个要素有关的更具体的问题。我有一个描述dao的接口。此接口由另一个接口实现,该接口将是wcf服务的接口。原因是父接口中的所有函数都需要通过wcf接口公开。父接口不包含wcf属性,因为它不需要这些属性。子接口需要wcf属性才能用作wcf接口。wcf接口最终可能包含更多不在父接口中的方法。有两种方法可以在子接口上获得这些属性,如下所示:

  • 用属性装饰父接口方法
  • 在子接口中重写父接口中的所有方法,然后用属性装饰这些方法 解决方案1真的有效吗?这意味着wcf属性会被子(wcf)接口继承并作为服务契约的一部分提供吗?这是坏习惯吗


    解决方案2是个好主意吗?简单地覆盖所有的方法,用wcf属性装饰它们,似乎会适得其反

    我认为你的解决方案是更好的

    这看起来可能适得其反,但实际上是合乎逻辑的:您有一个与某些方法的接口,这些方法执行某些任务,并且您在其上添加了另一个“层”,它以您需要的任何方式公开它们

    这样,如果您不想再通过WCF公开这些方法,而是想让它成为一个RIA服务,或者想用一个假客户端替换它,那么您只需切换“上层”层并更改覆盖即可。底层的实际接口甚至不需要知道这一点


    这一切都需要将“线路”(父界面)连接到正确的“显示器”(子界面)上。

    我认为您的解决方案#2更好

    这看起来可能适得其反,但实际上是合乎逻辑的:您有一个与某些方法的接口,这些方法执行某些任务,并且您在其上添加了另一个“层”,它以您需要的任何方式公开它们

    这样,如果您不想再通过WCF公开这些方法,而是想让它成为一个RIA服务,或者想用一个假客户端替换它,那么您只需切换“上层”层并更改覆盖即可。底层的实际接口甚至不需要知道这一点


    这一切都需要将“电线”(父界面)连接到正确的“显示器”(子界面)上。

    旁注:我对这种设计有点担心;它混合了内部依赖和外部依赖。你对设计有把握吗?对基接口、内部接口的任何更改都将强制在子接口、公共接口上进行。这就是你想要/需要的吗?我不会将属性添加到基本接口,因为它们在那里没有功能。老实说,我不确定接口继承设计,但是dao中包含的所有公共功能都需要通过wcf服务公开,这意味着两个接口是相同的。您是否建议完全忘记继承并将它们视为独立的实体(尽管它们如此相似)是一个更好的主意?wcf接口可能最终与dao接口不同,因为它可能包含更多的函数。我认为通过使用继承,我可以强制wcf接口确保它公开所有的公共dao功能。另外,如果你认为设计是错误的,那么请务必告诉我,因为我想听他们。我的另一个问题可能有助于您理解我的解决方案的结构。在一般服务中,要么公开服务类型的API:做大量工作并操作大型数据集的操作,要么公开资源类型的API:例如RESTFul API。在这两种情况下,我都希望这些操作独立于底层技术。内部接口可能包含特定于技术的参数和类型;我希望这些服务是免费的。旁注:我会有点担心这个设计;它混合了内部依赖和外部依赖。你对设计有把握吗?对基接口、内部接口的任何更改都将强制在子接口、公共接口上进行。这就是你想要/需要的吗?我不会将属性添加到基本接口,因为它们在那里没有功能。老实说,我不确定接口继承设计,但是dao中包含的所有公共功能都需要通过wcf服务公开,这意味着两个接口是相同的。您是否建议完全忘记继承并将它们视为独立的实体(尽管它们如此相似)是一个更好的主意?wcf接口可能最终与dao接口不同,因为它可能包含更多的函数。我认为通过使用继承,我可以强制wcf接口确保它公开所有的公共dao功能。另外,如果你认为设计是错误的,那么请务必告诉我,因为我想听他们。我的另一个问题可能有助于您理解我的解决方案的结构。在一般服务中,要么公开服务类型的API:做大量工作并操作大型数据集的操作,要么公开资源类型的API:例如RESTFul API。在这两种情况下,我都希望这些操作独立于底层技术。内部接口可能包含特定于技术的参数和类型;我希望这些服务是免费的。谢谢。这是一个很好的解释。所以,请保持它的原样