仅具有静态功能的Facade Pattern是不必要的层

时间:2013-07-28 10:30:46

标签: c# design-patterns facade

我目前正在使用IKVM来访问C#.Net项目中的大型Java库。库入口点是一个单例,从那里我可以创建对象并设置对象属性。

我目前在这个单例周围创建了一个C#Facade Pattern,并通过这个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;
    }
}

1 个答案:

答案 0 :(得分:3)

不,这里的静态方法没有任何问题。你不需要一个对象,你只是想隐藏实现你想要的东西。如果您不止一次地利用这种方法,那么保留它,每次使用它可以节省8到10行代码,使其更加稳定和可维护。

如果您不打算重复使用它,那么只需将方法的主体放在您需要的位置即可。