【问题标题】:Defining an interface which is blank and its implications定义一个空白的接口及其含义
【发布时间】:2011-03-10 21:14:59
【问题描述】:

我最近遇到了一种情况,我希望将一组类传递给一个方法(以便该方法将接口作为参数)。

但是接口下的类各自有不同数量的方法,所以接口本身是空白的。

如果有的话,这对我的应用程序设计有什么影响?在这种情况下,我打算使用抽象类,但我一直使用接口,所以可能有什么东西阻止了我使用抽象类(不记得是什么)。

语言:C#(尽管这与语言无关)。

【问题讨论】:

  • 为什么不让该方法接受泛型而不是基类?
  • 可能您需要将不同的类传递给方法的原因是,这些类都实现了类似的东西,但具有不同的功能/方式。在这种情况下,您可以在这些实现抽象(非空)接口的类上实现一些包装器。好处是您的客户端代码变得更简洁,并且独立于类。

标签: oop architecture


【解决方案1】:

这对我的应用程序的设计有什么影响(如果有的话)?

也许它说您需要更多地考虑某些责任的真正所在?记住Liskov substitution principle (LSP):子类型必须可以替代它们的基本类型。我也会记住Single Responsibility Principle (SRP)。但最重要的是保持简单。

我经常发现,只有在我将类似的东西放在一起并使用它一段时间(从不同的角度和不同的使用案例)之后,事情才开始变得清晰。所以它可能会说你有一些想法,但你还不清楚如何最好地做到这一点——这很酷;让一些东西工作,然后在你准备好时重构。

【讨论】:

    【解决方案2】:

    您所描述的是“标记界面”。

    http://en.wikipedia.org/wiki/Marker_interface_pattern

    与任何设计模式一样,只要它是手头任务的正确模式,它本身就没有好坏之分。

    【讨论】:

      【解决方案3】:

      我要问的问题是为什么您需要将这些类的实例传递到您的方法中,以及为什么它只能是该集合中的一个

      如果该方法可以使用System.Object 完成完全相同的操作,那么它应该将对象作为参数。如果它要求传入的项目具有某些特定功能,那么该功能应该已经在接口中编码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多