Model view controller 在Winforms中实现MVC

Model view controller 在Winforms中实现MVC,model-view-controller,Model View Controller,我试图理解如何在winforms中实现MVC,因此我总结了以下内容: 主窗体分为两个窗格(左/右)。左窗格将显示客户列表 订单详细信息表单,该表单将列出主表单上为所选客户下的所有订单。此订单详细信息表单将显示在主表单的右窗格中 现在,我为每个视图和一个演示者定义了一个视图界面。订单详细信息演示者应如何在其他视图中获得所选客户的信息?您需要发布和订阅机制 每个视图都可以宣布其状态更改(例如selectionchange事件) 感兴趣的组件可以订阅这些事件 这将使两个视图分离—这意味着您可以有一个额

我试图理解如何在winforms中实现MVC,因此我总结了以下内容:

  • 主窗体分为两个窗格(左/右)。左窗格将显示客户列表
  • 订单详细信息表单,该表单将列出主表单上为所选客户下的所有订单。此订单详细信息表单将显示在主表单的右窗格中

  • 现在,我为每个视图和一个演示者定义了一个视图界面。订单详细信息演示者应如何在其他视图中获得所选客户的信息?

    您需要发布和订阅机制

    每个视图都可以宣布其状态更改(例如selectionchange事件)

    感兴趣的组件可以订阅这些事件

    这将使两个视图分离—这意味着您可以有一个额外的窗格来显示客户的网页、订单历史图表、销售人员的照片……

    a)定义一个事件—例如selectionchange。If应为高级别,并用模型数据表示

    b) 每个带有选择的视图(例如,您的左窗格)都会显示此事件

    c) 任何想要订阅的视图(例如,您的右窗格)都会将自身附加到(b)所公开的事件

    你应该仔细阅读事件的定义和使用(大多数好的c#书籍都会有这样的内容)

    有趣的是,有了某种形式的经纪系统,消费者可以找到活动发布者,这就不需要(c)知道(b)的名称


    对于您的简单双窗格系统,我所描述的可能有些过分,但实施起来会很有趣,并增加了更多的长期灵活性

    我同意pm100,因为必须有一个发布/订阅机制

    为了遵守“关注点分离”原则,表单(或视图,如果您愿意)应该定义一些事件,您的控制器(或MVP中的演示者)可以连接到这些事件

    如果在左窗格中更改选择,这将触发控制器连接到的“LeftPane_SelectionChanged”事件并对其执行操作,在这种情况下,获取所选项目的详细信息(可以作为事件参数传递),在“model”对象中整理所选客户的订单,一旦获得,然后,通过调用“rightPanel_load”例程并传递该模型,可以将模型“发布”回视图(表单)

    表单/视图应尽可能保持轻量级和哑态,让所有业务逻辑都在其他现已解耦的中间件层中定义,并完全根据事件进行操作

    在手机上发布示例并不容易,但会在适当的时候更新


    仔细阅读MVC体系结构和面向对象设计原则(SOLID是一个很好的起点),这应该会让你对它有正确的想法,一旦你“明白了”,你就会有一个灯泡的时刻,大雾散去,突然你就会飞起来

    @JohnFx。为什么从MVP到MVCIn的变化MVP的术语是订单详细信息演示者必须订阅主视图事件,如果是,它将如何实现这一点。