2013-06-24 116 views
0

我有5個不同的類都從BaseEntity繼承。我想創建一個新的模型類,它將存儲關於這五個類中的一個以及其他標識符所需的信息。根據類型返回對象

當我從數據庫中檢索這個新模型的數據時,我得到的只是一個帶類類型的字符串以及一個表示我可以從數據庫中引用的條目的整數。

例如,如果我檢索Id = 2,Type =「BaseBall」。這意味着我將需要使用我的BaseBallService來獲取Id == 2的條目。如果碰巧是Id = 2,Type =「BasketBall」,那麼我將使用BasketBallService。

目前我能想到的唯一解決方案是擁有一堆評估'type'字符串的if語句。根據類型是否匹配有效類型(BaseBall,FootBall,BasketBall等),然後返回該對象。

有沒有一種方法可以輕鬆地做到這一點,而無需在模型定義中定義所有5種類型,並且可以通過字符串if或statement來識別它?

我希望我已經清楚地發現了這個問題。讓我知道是否需要任何其他信息。我還沒有寫任何代碼。我只是試圖分析問題並形成解決方案。

+1

我編輯了您的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

+2

有些東西似乎設計得很糟糕。爲什麼你需要這個「類型」信息?如果你從數據庫中得到某些東西,那麼你應該知道你想要得到什麼,它是什麼類型的? –

+0

@WojciechKulik,包含類型和Id的表是參考表。目標是創建一個由現有類型(BasketBall,BaseBall等)產生的新表單。由於這種形式可能來自任何一種類型,我需要知道它是哪一種。 – Alex

回答

1

我只是在項目或解決方案級別添加一個全局枚舉來存儲類型。這樣,如果您希望稍後添加它,則可以在不分離任何現有代碼的情況下將其分開。但是這可能會使它保持良好的輸入狀態,因此需要從最終用戶或應用程序列出的類型。我做了一個簡單的控制檯應用程序來顯示。您可以將枚舉應用於任何類,而不僅僅是泛型。我還實現了一個返回方法來縮小返回列表的範圍,以顯示如何更容易地獲取列表的列表。

public enum types 
    { 
     Type1, 
     Type2, 
     Type3 
    } 

    public class GenericListing 
    { 
     public string Description { get; set; } 
     public types Type { get; set; } 
    } 

    class Program 
    { 
     public static List<GenericListing> GetTypeListing(List<GenericListing> aListings, types aTypes) 
     { 
      return aListings.Where(x => x.Type == aTypes).ToList(); 
     } 

     static void Main(string[] args) 
     { 
      var stuff = new List<GenericListing> 
       { 
        new GenericListing {Description = "I am number 1", Type = types.Type1}, 
        new GenericListing {Description = "I am number 2", Type = types.Type2}, 
        new GenericListing {Description = "I am number 3", Type = types.Type3}, 
        new GenericListing {Description = "I am number 1 again", Type = types.Type1}, 
       }; 


      string s = ""; 

      GetTypeListing(stuff, types.Type1) // Get a specific type but require a well typed input. 
       .ForEach(n => s += n.Description + "\tType: " + n.Type + Environment.NewLine); 

      Console.WriteLine(s); 

      Console.ReadLine(); 
     } 
    } 
1

您可以嘗試使用詞典,例如

Dictionary<String, BaseEntry> types = new Dictionary<String, BaseEntry>() { 
    {"BaseBall", new BaseBallService()}, 
    {"BasketBall", new BasketBallService()}, 
    ... 
    } 

    ... 
    var value = types["BaseBall"].GetId(2);