gpt4 book ai didi

c# - MVP 和多个用户控件

转载 作者:IT王子 更新时间:2023-10-29 04:54:12 24 4
gpt4 key购买 nike

我正在尝试使用 MVP 模式,但遇到了设计问题。我正在开发一个将具有多个 UserControl 的应用程序。 UserControls 本身彼此无关,只代表实际模型的一个子集。据我所知,人们倾向于说每个 View 应该使用一个 Presenter。这似乎有道理,但如果我有 30 个 UserControl,我真的需要 30 个 Presenter 吗?另一方面,如果我有 1 个 Presenter 和 1 个 View 代表整个“应用程序” View ,那么我将拥有臃肿的 View 和 Presenter 界面。然后每个 View 都必须实现与其无关的方法。我的问题是,是否有更好的方法来处理多个 UserControl,或者我应该为每个 View 创建 1 个 Presenter?

最佳答案

您应该为每个控件设置一个演示者,因为:

  • 这样您就可以有针对性的单元测试只处理该控件
  • 提高可维护性,因为您不需要支持包含所有控件的呈现逻辑联合的巨大呈现器
  • 在多个页面上具有相同控制权的情况下,这将防止冗余
  • 通过在页面执行容器特定角色时让控件专注于其特定逻辑来提高 SRP:

通常提到的两个问题与“presenter per control”的决定有关:

  • Shared context 是一个问题,因为所有控件都只是显示同一页面数据上下文的不同部分,这种情况可能看起来像一个有问题的用例,会导致很多每个控件中的数据检索冗余代码。这很容易通过依赖注入(inject)来解决,其中页面(或 Controller )执行单个数据检索,然后将数据上下文对象注入(inject)每个演示者\ View (通常实现一些支持它的接口(interface))。在 MV-VM 模式(Silverlight、WPF)的情况下,可以通过数据绑定(bind)实现相同的效果,页面将设置其 DataContext,然后从 View 本身使用它
  • 同一页面上的 View 之间的通信是第二个问题,可以使用几种方法轻松解决:
  • 控件正在发布页面订阅的事件,然后直接调用其他控件中的适当方法(页面是所有控件的容器,这意味着它知道所有控件的成员)
  • 观察者设计模式
  • 事件聚合器模式

在每一种方法中,控件都在彼此不知情的情况下相互通信

关于c# - MVP 和多个用户控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/786476/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com