0

我是事件驱动开发的新手,当我尝试实现应该通过核心/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 生成的事件 我的分离是某种“我的恐惧症”,还是以前做过。还有其他更好的方法吗?

4

1 回答 1

2

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

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

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

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

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

于 2012-05-01T15:04:34.020 回答