2

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

在以下情况下,我使用枚举(SerialisationTypes)来确定所需的具体实现,默认情况下,我计划通过无参数方法返回 JSON 序列化器实现,但这在 switch 语句的默认值上是正确的行为还是应该我抛出异常?

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();
            }
        }
    }
}
4

2 回答 2

3

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

另外,在您的代码中,如果枚举具有附加值(例如 XmlSerialiser、ProtbufSerializer 等),那么您将始终返回一个 JSonSerialiser,这将导致难以找到错误。最好是抛出异常,然后修复代码。

于 2012-11-02T10:51:30.683 回答
2

通常,如果找不到您的类型,则表示编码错误。如果您返回默认值,您将在稍后引发异常时看到错误。而且您正在向自己和其他开发人员隐藏您的错误。因此,抛出异常将帮助您在开发过程的早期发现错误。并且更早地发现错误将花费您更少的金钱和时间来交付正确的工作软件。

于 2012-11-02T10:48:53.320 回答