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;
}
}
您打算重用'CreateCodeWithSubCode'方法嗎? – Dennis
是的。這個功能和更多像它一樣被重複使用。 – flip
恕我直言,這是相當建設者模式,而不是門面模式。你應該避免靜態方法的可測試性,並且因爲它阻止通過繼承(或通過接口)的擴展 – jgauffin