使用接口中的事件是一种不好的做法

时间:2013-05-17 05:08:42

标签: c# design-patterns

事件是观察者模式的编译器实现。而且我认为在界面中添加一些设计模式实现的合同是不合逻辑的。所以似乎在界面中添加事件可能是不好的做法。是不是?

3 个答案:

答案 0 :(得分:4)

当然,某些物品只是“多事之秋”。我想到的是像MVVM中的viewmodels这样的东西。重要的是,他们实现一个事件,让视图知道事情何时发生变化,以便更新视图。 (见INotifyPropertyChanged。)

许多其他事情也需要能够引发事件,比如套接字侦听器。可以想象一个广义听众的界面,其主要成员是新连接的事件,也可能是新数据到达的事件。

更广泛地说,仅仅因为设计模式提示某些东西是没有理由不在界面中定义它。事实上,许多人会把它作为邀请来这样做。我的建议是做最有意义的事情,无论它是否符合设计模式。

答案 1 :(得分:1)

我认为界面中的事件完全有意义。

如果您的服务在合同中公开了客户通知的方式,为什么不呢?

有什么替代方案?定义回调接口并将其注册到服务中? 这是来自GoF书籍的观察者的规范实现,并且您似乎没有将该特定模式实现推送给用户的问题(请注意,您向用户公开的内容始终很重要,而不是实现 - 实现不会自己写。)

答案 2 :(得分:1)

事件不是Observer模式的编译器实现,而是模式的语言框架实现。因此,它是.NET框架和C#语言的一流成员。这就是为什么我不担心在界面中使用它们 - 它们太多了隐藏语言的一部分。

属性也是如此。它们也是一种设计模式,将getter / mutator方法隐藏在简单的语义背后。但我们仍然在接口中使用它们。

不要害怕抽象。良好的模式被使用,因此它们沉入基础设施并变得透明。这是件好事。