2013-02-12 57 views
2

我需要關於OOD的一些建議。以下是我的情況。需要面向對象的設計建議

Class A{ 
    private B service_; 
    private StopWatch timer_;  
    private Const int MinTimeToWait; 

    public SomeOperation(){ 
     timer_.start(); 
     //call another method on service_ async and subsribe to event for callback 
    } 

    private SomeOperationCallback() 
    { 
     timer_.stop(); 
     int elapsedTime = timer_.elapsedTime(); 
     if(elapsedTime < MinTimeToWait) 
      Thread.sleep(MinTimeToWait - elapsedTime) 

     //Continue after thread resumes 
    } 

} 

我有觸發一個異步操作的類,以及異步操作返回後,我需要檢查,如果asycn操作小於MinTimeToWait回來,如果是等待MinTimeToWait完成,然後與其他進行操作。

現在,我通過包含檢查時間和在SomeOperationCallback中等待的邏輯來做正確的事情,還是應該創建一個封裝邏輯和StopWatch的新類並使用該類來執行此檢查並等待?

在此先感謝您的答覆。

回答

1

我沒有看到您的方法有任何問題。這個問題看起來更像是什麼來命名'A',也許是'MinWaitProcess'。其責任是確保流程等待最短時間。

現在,我通過包括檢查 時間和等待在SomeOperationCallback邏輯做正確的事,或者我應該創建一個新的 類封裝邏輯和秒錶和使用類 做到這一點檢查並等待?

如果你這樣做,我懷疑它看起來就像你有什麼用A級

+0

實際上是一個類是一個WPF查看一個視圖模型,所以它就像在SomeOperationCallback() – 2013-02-12 18:44:34

+0

在這種情況下得到的結果,更新界面等操作,問題歸結爲可重用性。代碼中還有其他地方需要這樣做嗎?如果是的話,是的,把它分成自己的班級。我寧願有許多具有明確責任的小班,而不是那些做太多事情的較少班級。 – 2013-02-13 14:38:43

0

正如凱利S.法語說你的做法是不夠好。如果你想在其他類中使用這種方法,用方法SomeOperation()和OperationCallback定義基類將會更好。之後你可以從基類繼承並通過調用超類方法實現可重用性。類似的東西:

Class Base { 

    private B service_; 
    private StopWatch timer_;  
    private Const int MinTimeToWait; 

    public SomeOperation(){ 
     timer_.start(); 
    } 

    protected SomeOperationCallback() 
    { 
     timer_.stop(); 
     int elapsedTime = timer_.elapsedTime(); 
     if(elapsedTime < MinTimeToWait) 
      Thread.sleep(MinTimeToWait - elapsedTime) 
     } 

    } 
} 
class A:Base { 
    SomeOperation() { 
     super.SomeOperation(); 
     // do some actions here 
     super.SomeOperationCallback(); 
    } 
}