2013-07-28 24 views
4

我目前使用IKVM訪問C#.Net項目中的大型Java庫。庫入口點是一個單例,從那裏我可以創建對象並設置對象屬性。是僅具有靜態功能的門面模式不必要的層

我目前已經創建了一個圍繞這個單例的C#Facade模式,並通過這個Facade做了我的對象創建和參數傳遞。門面內的功能都是靜態的。 Facade Pattern只包含靜態函數還是隻創建了一個價值很小的額外圖層,這是正常的嗎?

原來的Java代碼會是這個樣子:

Code code = Singleton.Instance.CreateCode(); 
code.SetExtension("12345"); 
code.SetId("1"); 

SubCode subCode = Singleton.Instance.CreateSubCode(); 
subCode.SetRoot("6789"); 
subCode.SetId("2"); 

code.SetSubCode(subCode); 

簡化(沒有錯誤檢查)C#版本看起來是這樣的:

public static FacadePattern 
{ 
    public static Code CreateCodeWithSubCode(string extension, string codeId, string root, string subCodeId) 
    { 
     Code code = Singleton.Instance.CreateCode(); 
     code.SetExtension(extension); 
     code.SetId(codeId); 

     SubCode subCode = Singleton.Instance.CreateSubCode(); 
     subCode.SetRoot(root); 
     subCode.SetId(subCodeId); 

     code.SetSubCode(subCode); 

     return code; 
    } 

    public static CreateCodeForHP(string extension, string codeId) 
    { 
     Code code = Singleton.Instance.CreateCode(); 
     code.SetExtension(extension); 
     code.SetId(codeId); 
     code.SetUse(com.org.vocabulary.HP); 

     return code; 
    } 
} 
+0

您打算重用'CreateCodeWithSubCode'方法嗎? – Dennis

+0

是的。這個功能和更多像它一樣被重複使用。 – flip

+0

恕我直言,這是相當建設者模式,而不是門面模式。你應該避免靜態方法的可測試性,並且因爲它阻止通過繼承(或通過接口)的擴展 – jgauffin

回答

3

沒有,有什麼不對靜態方法在這裏。你不需要一個對象,只是試圖隱藏實現獲得你想要的東西。如果您將不止一次地利用這種方法,那麼就放棄它,每次可以節省8-10行代碼,使其更加穩定和可維護。

如果你不打算重用它,那麼就把方法的主體放在你需要的地方。

相關問題