【问题标题】:Event driven design and separation of core/UI logic事件驱动设计和核心/UI逻辑分离
【发布时间】:2012-05-01 14:33:25
【问题描述】:

我是事件驱动开发的新手,当我尝试实现应该通过核心/UI 边界的事件时,我感到迷茫。

在我的程序中,我有以下内容(c# 中的示例):

UI.RuleForm   Core.RuleList     UI.ResultForm
Cell 1        Rule 1
Cell 2        Rule 2
Cell 3        Rule 3

我想要的是: 当RuleForm 单元格发生变化时,它会更新RuleList 中的相应规则。而当RuleList发生变化时,resultFrom会根据规则重新计算。

我目前的想法是,为了保持核心逻辑与 UI 逻辑分离(即核心应该对 UI 一无所知),那么核心应该只生成事件,而不是处理其他人生成的事件。

所以我必须创建某种UI.RuleListWrapper,它可以处理RuleForm 更改事件,更新Core.RuleList。术语中的RuleList 应该触发OnChange 可以使用的UI.ResultForm 事件。

总之,我的问题是:

我想知道我的推理和有目的的实现是否可以,这可能意味着:核心模块是否应该能够处理由外部 UI 生成的事件 我的分离是某种“恐惧症”,还是以前做过。 还有其他更好的方法吗?

【问题讨论】:

    标签: c# model-view-controller events event-handling separation-of-concerns


    【解决方案1】:

    您设置了mvc 标签。在 MVC 中,您有一个模型,其中包含数据和业务逻辑(或特定于域的逻辑,如果您愿意)。您有一个 VIEW 来显示数据并接受用户输入。该视图包含最少的代码。最后你有一个 CONTROLLER,它将视图和模型联系在一起并协调整个事情。

    您的示例中缺少的部分是控制器。

    MVC 模式公开了一个总体思路,但没有指定任何实现细节。因此,您会发现 MVC 的实现方式完全不同。

    模型对视图或控制器一无所知。通常视图不知道控制器。实现 MVC 的主要挑战是找到在 M、V 和 C 之间进行通信的适当方式。我认为在使用 .NET 时利用对象数据绑定并将视图直接绑定到模型是一个好主意. (这可能不是“纯粹的”MVC,但这不会伤害任何人。)该模型应该实现INotifyPropertyChanged。它允许模型在不知道任何细节的情况下与视图和控制器进行通信。控制器可以选择订阅模型的PropertyChanged 事件,以便在属性更改时采取适当的操作,例如告诉视图启用或禁用控件。控制器还会订阅视图的按钮点击事件并触发相应的操作。

    控制器还可以与其他控制器通信,允许您在另一个视图上显示一个 M-V-C 三重奏中的操作结果。

    【讨论】:

      猜你喜欢
      • 2010-10-24
      • 1970-01-01
      • 2021-07-10
      • 2022-11-23
      • 2011-04-10
      • 1970-01-01
      • 2011-04-10
      • 2012-03-04
      相关资源
      最近更新 更多