2013-03-21 65 views
0

我創建一個方法,實現到管理器(比如ReqManager),其將被從控制器ReqController稱爲調用,從控制器到管理器,它的參數選擇

的定義是:

public void LockTransDetail(IRow detailRow, DataSet data, string fieldName, bool lockYN) 

public void LockTransDetail(IRow detailRow, IDecorator decorator, string fieldName, bool lockYN) 

,所以我可以執行第一和磨片來實現,

public void LockTransDetail(IRow detailRow, DataSet data, string fieldName, bool lockYN) 
{ 
    IDecorator decorator = GetDecorator(data); 
    ...... 
} 

或第二選擇是,到控制器做:

IDecorator decorator = GetDecorator(data); 

,然後調用該方法,

ReqControllerInstance.LockTransDetail(detailRow, decorator, fieldName, lockYN) 

那麼,什麼是更好的數據集或去裝飾作爲傳遞參數到所產生的方法是什麼?

回答

0

我不完全確定我理解你的問題,但如果我這樣做,你問是否更好的控制器調用管理器上的一個單一方法(Manager.DoSomething),或者是否分解成幾個步驟(Manager.ConvertData,Manager.GetDecorator,然後Manager.DoSomethingWithDecorator)。

這取決於這些步驟是什麼。在你帶來的例子中,我可能會選擇第一個選項。控制器的作用是協調工作流程 - 它知道當前的操作需要轉移到RequestManager的職責中。它不應該做的是做RequestManager的工作。如果你使用DataSets是你的標準數據傳輸對象,那麼這就是你應該傳遞給Manager的。任何進一步的處理都應該在經理中完成。

+0

非常感謝,在你的最後一句 如果你使用DataSets是你的標準數據傳輸對象,那麼這就是你應該傳遞給管理器。任何進一步的處理都應該在經理中完成。 有答案,我問的是,如果是更好地調用一個發送完整的數據集或更輕的裝飾器的經理,但我認爲這是更好的獨立發送數據集 – 2013-04-04 13:28:39

+0

這些是交叉的,需要序列化的進程調用?因爲否則,「重」或「輕」是不相關的,因爲只有一個參考被通過。 – 2013-04-04 13:45:03

0

第二個選擇似乎更通用的和可測試:你的類實現從具體data表現脫鉤,這意味着你將能夠輕鬆地與別的替代DataSet,不會有改變LockTransDetail()合同,因爲它依賴僅在IDecorator