【问题标题】:MVP - User Controls - Hiding the IView interface from consumers?MVP - 用户控件 - 对消费者隐藏 IView 界面?
【发布时间】:2009-10-14 12:51:01
【问题描述】:

我想将模型视图演示者模式用于包含将在其他项目中使用的用户控件的库。

根据 MVP,我必须在用户控件上实现 IView 接口并将其传递给 Presenter 类。

在我的情况下,消费者不需要访问 IView 合同。 但是因为 IView 接口是一个公共契约,这意味着用户控件的消费者也可以访问它的方法\属性,我希望这些只能由 Presenter 访问。

有什么好的方法可以做到这一点?

【问题讨论】:

  • 您好 RS Conley 感谢您的回复。我不完全理解你的意思,但我建议你做的一件事是没有在用户控件上实现 IView。目前我这样做是这样的:在用户控件中,我创建了一个嵌套类,它在其构造函数中接受用户控件。嵌套类实现 IView 并了解演示者。通过这种方式,我可以对控件的消费者隐藏 IView 合同,并处理嵌套类中的所有内容。
  • 那个类只是控件的替代品。我得到的是 VIEW 是 FORM 而不是 CONTROL 甚至间接地通过一个辅助类。只有当一个控件可以等同于一个视图时,我才能想到一个表单有多个选项卡,每个选项卡都有一个模型视图,并且每个选项卡都在控件中实现。那么让控件实现视图(直接或间接)是有意义的。

标签: c# controls mvp


【解决方案1】:

我找到了适合我的情况的解决方案。

我将 IView 接口设为内部并在用户控件上显式实现它们。 这样,IView 接口就不是我需要的用户控件公共接口的一部分。

【讨论】:

    【解决方案2】:

    我一直认为与视图相关联的用户控件本身并不是一个单独的视图。他们应该能够访问他们所绑定的视图可以访问但本身不是视图的任何 Presenter。相反,它们是视图的一部分,如果 UI 发生变化,可以在不关心当前的情况下替换或更改它们。

    在您的具体示例中,我会让用户控件不实现任何视图界面。相反,我只需让用户控件程序集引用演示者程序集并具有允许访问它所属的视图对象的属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-03
      相关资源
      最近更新 更多