C#出厂默认返回

时间:2012-11-02 10:44:42

标签: c# .net factory-pattern

我创建了一个简单的工厂,在我扩展它以涵盖其他实现之前,我想知道从switch / default返回的正确/推荐行为是什么。

在下面的例子中,我使用枚举(SerialisationTypes)来确定所需的具体实现,默认情况下,我计划通过参数less方法返回JSON序列化器实现,但这对于切换器的默认值是否正确声明还是应该抛出异常?

namespace Helper.Core.Serialisation
{
    internal class SerialisationFactory
    {
        internal ISerialiser Create()
        {
            return Create(SerialisationTypes.JsonSerialiser);
        }

        internal ISerialiser Create(SerialisationTypes type)
        {
            switch (type)
            {
                case SerialisationTypes.JsonSerialiser:
                    return new JSonSerialiser();
                default:
                    return new JSonSerialiser();
            }
        }
    }
}

2 个答案:

答案 0 :(得分:3)

你最好不要抛出异常,因为用户正在请求你没有实现的东西。

另外,在你的代码中,如果枚举有其他值(例如XmlSerialiser,ProtbufSerializer等),那么你将永远返回一个JSonSerialiser,这将导致很难找到错误。抛出异常然后修复代码会更好。

答案 1 :(得分:2)

通常,当找不到您的类型时,它表示编码错误。如果返回默认值,则稍后会在抛出异常时看到错误。你正在隐藏你自己和其他发展者的错误。因此,抛出异常将帮助您在开发过程中更早发现错误。找到错误的错误会花费更少的金钱和时间来提供正确的工作软件。