我正在构建一个系统,其中主表单上有一个数据表,当用户插入或删除某些内容时必须更新该数据表。一旦有特定的表单来执行这些任务,当在对话框窗体上成功终止CRUD操作时,将更新主窗体的数据表。问题是每当我必须添加其他形式对数据进行一些更改时,我必须在对话框表单上创建一个具有相同意图的事件,并将其分配给填充数据表的方法,违反了开放的封闭原则。这是一个例子:
在“更新产品”对话框窗体中创建事件:
public static event Action OnUpdateProduct
在“新产品”对话框窗体中创建一个事件:
public static event Action OnUpdateProduct
以主窗体分配给FrmNewProduct.OnUpdateProduct事件:
FrmNewProduct.OnUpdateProduct += FillDataTable;
以主窗体分配给FrmUpdateProduct.OnUpdateProduct事件:
FrmUpdateProduct.OnUpdateProduct += FillDataTable;
如何解决此问题以解耦主窗体?
答案 0 :(得分:0)
EventAggregator设计模式(http://martinfowler.com/eaaDev/EventAggregator.html)将对您有所帮助。它可以作为发布者和订阅者之间的中介,从根本上解耦两者。
答案 1 :(得分:0)
考虑使用OnUpdateProduct和TriggerUpdateProduct()伴随函数构建全局单例EventDispatcher类。在您的主表单中,您附加到一个事件,您可以从多个其他表单中激活它。
您需要的只是事件触发器及其订阅之间的分离。我的例子只是一个简单的方法,你可以考虑其他方法,如zmechanic的建议