Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 观察者模式还是只创建事件处理?_C#_Design Patterns_Asp.net Mvc 2_Oop - Fatal编程技术网

C# 观察者模式还是只创建事件处理?

C# 观察者模式还是只创建事件处理?,c#,design-patterns,asp.net-mvc-2,oop,C#,Design Patterns,Asp.net Mvc 2,Oop,我想在我的web应用程序中创建一个“模块””布局,这样我就可以轻松地添加更多相同类型的模块,例如: 例如,我的WebApp处理订阅和电子邮件活动,我想创建一个界面,以便轻松耦合多个API、MailChimp、活动监视器、iContact等 因此,我将创建一个IMailingService界面,在这里我设置基本规则,所有模块都将像这样实现它 public class CampaignMonitorService : IMailingService 到目前为止还不错 在我的webapp上执行操作时

我想在我的web应用程序中创建一个“模块””布局,这样我就可以轻松地添加更多相同类型的模块,例如:

例如,我的WebApp处理订阅和电子邮件活动,我想创建一个界面,以便轻松耦合多个API、MailChimp、活动监视器、iContact等

因此,我将创建一个
IMailingService
界面,在这里我设置基本规则,所有模块都将像这样实现它

public class CampaignMonitorService : IMailingService
到目前为止还不错

在我的webapp上执行操作时,触发接口方法如何

我应该实现观察者设计模式,还是简单地创建事件处理程序,或者任何其他挂钩

例如,在用户订阅时,我想在
界面上启动
AddSubscriber
方法

AddSubscriber(string email, string[] args);
创建列表、取消订阅等

处理此类场景的最佳方法是什么?

事件处理程序通常是如何在.NET中实现观察者模式的。该模式是.NET世界的一流公民,非常类似于迭代器模式的内置方式(使用
foreach
yield-return


如果您确实希望使用不带事件/事件处理程序的模式,则可以使用新的和(在.NET 4.0中引入)。

我相信这些是在3.5中添加的+1无论如何。@Zor-如果您查看文档,您会发现3.5中没有关于这些的条目
IObservable
仅在.NET Framework 4中可用,但是感谢您的提醒,我将使用事件处理来实现这一点。@balexandre-是的,正如我在回答中所指出的,它在.NET 4.0中是新的。我的目的是: