我创建了一个简单的工厂,在我扩展它以涵盖其他实现之前,我想知道从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();
}
}
}
}
答案 0 :(得分:3)
你最好不要抛出异常,因为用户正在请求你没有实现的东西。
另外,在你的代码中,如果枚举有其他值(例如XmlSerialiser,ProtbufSerializer等),那么你将永远返回一个JSonSerialiser,这将导致很难找到错误。抛出异常然后修复代码会更好。
答案 1 :(得分:2)
通常,当找不到您的类型时,它表示编码错误。如果返回默认值,则稍后会在抛出异常时看到错误。你正在隐藏你自己和其他发展者的错误。因此,抛出异常将帮助您在开发过程中更早发现错误。找到错误的错误会花费更少的金钱和时间来提供正确的工作软件。