“设计模式”可以应用于不同的程序吗?

时间:2012-06-13 03:42:49

标签: design-patterns observer-pattern publish-subscribe

我有2个程序A,B。如果A完成,我希望B知道并开始运行,使用来自A的结果的数据。

A是.NET Web应用程序。我认为这不会一直存在于记忆中,对吗?只有在浏览器要求时才有效,对吗?

之前,A和B是同一程序的2个功能。但由于商业原因,B程序有时会失败。即使B没有失败,也很耗时,让客户等待太久并且不开心。所以我把B分开了。客户顺利使用A并且很开心。 B做背景的工作人员。

我目前的设计是:当A完成时,A将数据保存到数据库中。 B是一项Windows服务。它每5分钟检查一次数据库,并在找到新作业时开始运行。 A,B彼此不认识。

老板问为什么闲置5分钟?我回答是因为这是实施我们业务的最简单方式。我设计得不多。

所以我去阅读材料,发现Observer Pattern似乎就像我想要的那样。经过几次阅读后,我认为Observer Pattern只能应用于同一程序中的类,而且类和对象都在记忆中。

我不确定我的问题是:GOF Design Patterns可以应用于不同的程序吗?

或:像RabbitMQ这样的东西如何实现这种实时处理的要求?

我无法想象将5分钟的检查间隔设置为非常小的时间段。这对cpu来说是一个很大的负担。

编辑:我已经对ObserverPublish/Subscribe进行了解释,我认为这对于那些从搜索中看到这个帖子的人有用。

http://addyosmani.com/resources/essentialjsdesignpatterns/book/#observerpatternjavascript

  

观察者和发布/订阅模式之间的差异

     

观察者模式要求希望接收主题通知的观察者(或对象)必须将此兴趣订阅到触发事件的对象(主题)。

     然而,

发布/订阅模式使用主题/事件通道,该通道位于希望接收通知的对象(订阅者)和触发事件的对象(发布者)之间。此事件系统允许代码定义特定于应用程序的事件,这些事件可以传递包含订户所需值的自定义参数。这里的想法是避免订阅者和发布者之间的依赖关系。

     

这与Observer模式不同,因为它允许任何实现适当事件处理程序的订阅者注册并接​​收发布者广播的主题通知。

3 个答案:

答案 0 :(得分:1)

观察者模式更适合设计OO类,这是对的。程序之间可以使用的一种模式是发布 - 订阅模型,我认为这非常适合您描述的内容。进程B订阅由A触发的某些事件。这通常由服务体系结构调解;例如,进程A和B是Web应用程序(或WCF / MVC / Web API),并且有第三个应用程序调解发布 - 订阅模式。所以当A完成时,它会向pub-sub服务发送一个事件; pub-sub服务向该事件的所有订阅者发送通知(在您的情况下,应用程序B)。

您可以自己实施此模式;还有一些.NET框架,例如实现它的NServiceBus

答案 1 :(得分:0)

使用“拉模型”效率低下并浪费资源。 发布 - 订阅模型是更好的选择。 在此link中,您可以看到指导您的注释。 这些示例使用Java,但很容易实现.net。

答案 2 :(得分:0)

应用程序之间的观察者模式的类似机制是使用远程方法调用远程过程调用(因此在java中调用它)。在.Net中,它应该在Windows Communication Framework之下。

应用程序A由WCF向应用程序B发送(异步)消息。应用程序B也可能首先将自己注册为消息收件人,但是如果A偶然崩溃并且不是最好的选择。