2012-11-02 52 views
2

我創建了一個簡單的工廠,在擴展它來涵蓋其他實現之前,我想知道從switch/default返回的正確/推薦行爲是什麼。C#出廠默認返回

在下面的例子中,我使用枚舉(SerialisationTypes)來確定所需的具體實現,並且默認情況下我打算通過參數less方法返回一個JSON串行器實現,但是這對於Default 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(); 
      } 
     } 
    } 
} 
+0

既然你打算使用JSON作爲默認,那就好了。 –

+0

你是反正強制用戶傳遞一個枚舉type.isnt它? –

回答

3

你最好拋出一個異常,因爲用戶正在請求你沒有實現的東西。

另外,在你的代碼中,如果枚舉有附加值(例如XmlSerialiser,ProtbufSerializer等),那麼你將永遠返回一個JSonSerialiser,這將導致很難找到錯誤。拋出異常然後修復代碼更好。

2

正常情況下,如果找不到類型,則表示編碼錯誤。如果你返回一個默認值,那麼當你拋出一個異常時,你會看到錯誤。而你正在隱藏自己和其他開發者的錯誤。所以拋出一個異常將幫助你在開發過程的早期發現錯誤。發現錯誤ealier將花費更少的錢和時間來交付正確的工作軟件。