2012-07-16 42 views
0

我有執行完全不同操作的A,B,C(此列表可以增長)的操作列表。每個操作都由獨立的java類執行。有一位經理MngrY坐在最前面,並且呼叫A,B,C。爲了達到目的,執行操作(A,B,C)的類需要調用不同的服務X1,X2,X3,X4,X5 。我們有用於調用服務的包裝類WX1,WX2,WX3,WX4,WX5。我們從A,B,C撥打的一些電話很常見(比如說WX3,WX4)。 (可能是A,B,C中的兩個或其中三個)。設計問題:在多個操作需要時從個別操作或管理器調用服務

現在我們應該從哪裏調用X1,X2,X3,X4,X5。理想情況下,A,B,C中的每一個都應該調用所需的服務。但是對於那些在A,B,C中共享的那些,從MngrY調用並將服務調用的輸出發送給A,B,C中的每一個都是有意義的(這樣做是有意義的,但是設計明智,因爲MngrY應該不知道A,B,C如何操作)。

所以選項是從MngrY和從單個組件單獨要求

  1. 呼叫普通電話服務(WX3,WX4)。這是好的設計嗎?

  2. 從Manager MngrY撥打所有服務電話。它會擴大嗎?我們可能在將來需要大量的服務請求,並且爲了其他人的需要而阻止每個模塊,並且設計明智地讓MnagrY知道每個模塊的需求。

  3. 根據需要制定來自單個組件的所有服務調用(並根據需要),並通過緩存處理重複請求。依靠緩存來完成兩個呼叫是不是很好?該服務必須在幾毫秒內返回結果,並且不能總是進行兩次呼叫。

  4. 或者我們應該在WX1,WX2,WX3 ......中有一個緩存機制,以確保相同的呼叫不會兩次。

此外,在未來我們可能會想打電話給A,B,C,從MngrY並行所以在這種情況下,可以將緩存創建一個問題。同樣的請求可能會不止一次。

回答

0

嗯......

在必須進行復雜和操作的不同序列的情況下,我通常再打一個狀態機帶有某種「請求/命令/結果」類,通話它,比如'OpClass'。經理加載一個類的實例,其中包含定義A,B或C操作,數據,命令枚舉,鏈接,其他類實例等等所需的一切。通過這種方式,OpClass實例擁有以正確的順序執行必要的X1..X5操作所需的所有狀態和其他信息(如果順序很重要),並且確保操作不會不必要地重複--A,B或者C被封裝。 OpClass然後被髮布給A,B或C,並且這些代理可以根據需要調用X1..X5來完成請求的操作。 OpClass應包含用於存儲任何結果和錯誤報告的成員,例如。一個用於錯誤消息和/或一個異常對象的字符串,因此,如果某些事情出現了問題並提供所有需要的信息,例如記錄錯誤或稍後再試,就可以使操作返回「早期」。

TBH,我可能會將A,B C聚合到OpClass中,因此形成一種只需要裝載數據和命令然後提供執行的'超級'OpClass,例如。通過run()方法。稍後移動到具有隊列,線程和/或線程池的並行操作會變得更簡單,實際上接近於微不足道的:)

這是相關的還是有意義的?

相關問題