用事件打开关闭原则

时间:2015-01-13 14:55:31

标签: oop design-patterns

我正在构建一个系统,其中主表单上有一个数据表,当用户插入或删除某些内容时必须更新该数据表。一旦有特定的表单来执行这些任务,当在对话框窗体上成功终止CRUD操作时,将更新主窗体的数据表。问题是每当我必须添加其他形式对数据进行一些更改时,我必须在对话框表单上创建一个具有相同意图的事件,并将其分配给填充数据表的方法,违反了开放的封闭原则。这是一个例子:

在“更新产品”对话框窗体中创建事件:

public static event Action OnUpdateProduct

在“新产品”对话框窗体中创建一个事件:

public static event Action OnUpdateProduct

以主窗体分配给FrmNewProduct.OnUpdateProduct事件:

FrmNewProduct.OnUpdateProduct += FillDataTable;

以主窗体分配给FrmUpdateProduct.OnUpdateProduct事件:

FrmUpdateProduct.OnUpdateProduct += FillDataTable;

如何解决此问题以解耦主窗体?

2 个答案:

答案 0 :(得分:0)

EventAggregator设计模式(http://martinfowler.com/eaaDev/EventAggregator.html)将对您有所帮助。它可以作为发布者和订阅者之间的中介,从根本上解耦两者。

答案 1 :(得分:0)

考虑使用OnUpdateProduct和TriggerUpdateProduct()伴随函数构建全局单例EventDispatcher类。在您的主表单中,您附加到一个事件,您可以从多个其他表单中激活它。

您需要的只是事件触发器及其订阅之间的分离。我的例子只是一个简单的方法,你可以考虑其他方法,如zmechanic的建议