2012-07-11 43 views
0

我有一個不同的對象類型(約15種不同類型)的數組,他們來自第三方系統。 對於我需要進行不同轉換的每種類型。 我最初的想法是與變換函數做一些接口,併爲每個類型創建一個類並運行它自己的實現。 但是,像這樣,我需要做一個非常大的if語句來檢查對象類型並進行映射。創建映射功能的調度器

我想在這裏學習一些新東西,所以我的問題是有其他方法來處理這種情況?

回答

2

您是否考慮過使用Visitor的可能性?

如果您在使用的dynamic結合訪問者模式,你可以得到一個非常簡單的實現沒有任何ifswitch聲明,也不必手動創建型詞典與代表,或類似的替代品。

使用dynamic您可以避免實現設計模式的「accept」部分,我認爲這對您很有用,因爲這些是您無法控制的外部類型。

含義,你創造的東西是這樣的:

public interface IVisitor 
    { 
     void Visit(OneType element); 
     void Visit(AnotherType element); 
     .... 
    } 

您實現客人,可以在以後通過調用執行:

visitor.Visit((dynamic)objectToTransform); 

你可能不得不辦理有關沒有例外適當的過載爲Type

這將解決與爲每種類型執行單獨方法有關的問題的一部分。 現在,根據您每個人需要做什麼,如果您需要自動屬性映射,那麼AutoMapper可能非常有用。

0

我不知道這是否是你想要的,但看看AutoMapper(或aother映射器)。它允許您輕鬆定義規則以將類型映射到其他類型。

+0

但AutoMapper也需要if語句,因爲我需要指定我正在運行它的對象。 – 2012-07-11 06:43:44