2012-06-13 51 views
0

我有2個程序A,B。如果A完成,我想B知道並開始運行,使用結果A的數據。「設計模式」可以應用於不同的程序嗎?

A是一個.NET Web應用程序。我認爲這並不是一直在記憶中,對吧?只有在瀏覽器請求時才存在,對嗎?

之前,A和B是同一個程序的兩個功能。但是由於商業原因,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模式要求觀察者(或物體)希望接收的話題通知必須訂閱這個感興趣的對象燒成事件(主題)。

但是,發佈/訂閱模式使用位於希望接收通知的對象(訂閱者)和觸發事件的對象(發佈者)之間的主題/事件通道。這個事件系統允許代碼定義特定於應用程序的事件,這些事件可以傳遞包含訂戶所需值的自定義參數這裏的想法是避免用戶和發佈者之間的依賴關係。

這不同於觀察者模式,因爲它允許實現適當的事件處理程序的任何用戶進行註冊並領取話題通知由publisher.`

回答

1

廣播你說得對,Observer模式是多爲設計OO課程。一種可以在程序間工作的模式是發佈 - 訂閱模式,我認爲這很適合你描述的內容。進程B預訂由A觸發的某些事件。這通常由服務體系結構調解;例如,進程A和B是Web應用程序(或WCF/MVC/Web API),還有第三個應用程序調解發布 - 訂閱模式。所以當A完成時,它會向pub-sub服務發送一個事件;並且pub-sub服務發送一個通知給該事件的所有訂閱者(在你的情況下,應用程序B)。

你可以自己實現這個模式;也有.NET框架,如NServiceBus實現它。

+0

我研究了NServiceBus。這似乎是我想要的。謝謝。但我也看到一些文章說'觀察者模式'=='發佈 - 訂閱模式'。那是什麼意思?如果我不想使用MSMQ,NServiceBus會有其他的選擇嗎? – hbrls

+0

我有另一臺運行debian的服務器機器。我在linux/python中有類似的東西嗎? – hbrls

+0

@hbrlovehaku是的,第二個想法,我想觀察員和pub/sub是一樣的東西......你將使用Web服務/ RPCs,但設計模式是相同的。至於Linux/Python,對不起,我不能幫助你,因爲我只是不知道。 – McGarnagle

0

使用「拉模型」效率低下,浪費資源。 發佈 - 訂閱模式是更好的選擇。 在這link你可以看到一個筆記,將引導你。 這些示例使用Java,但易於實現.net。

0

應用程序之間的觀察者模式的可比較的機制是使用遠程方法調用遠程過程調用(因此它被稱爲在Java)。在.Net它應該在:Windows Communication Framework

應用程序A通過WCF嚮應用程序B發送(異步)消息。應用程序B也可能首先將自己註冊爲消息收件人,但如果A現在和之後崩潰,那麼這不是最好的選擇。

+0

我不認爲WCF明白這一點。我沒有使用WCF,但讀了相關的東西。我認爲WCF是進程之間的一些契約。我寧願使用json並用文檔定義合同。請告訴我,如果我誤解了它。 – hbrls

+0

我不太瞭解.Net架構。我認爲通過* WCF *可以在應用程序之間發送/接收異步消息。但是,無論你實際實現它,它的工作原理如下:*主題*(應用程序A)發送消息(通知)*觀察者*(應用程序B)。然後觀察者觸發任何操作(例如查找數據庫)。 – matcauthon

相關問題