我有一個不同的對象類型(約15種不同類型)的數組,他們來自第三方系統。 對於我需要進行不同轉換的每種類型。 我最初的想法是與變換函數做一些接口,併爲每個類型創建一個類並運行它自己的實現。 但是,像這樣,我需要做一個非常大的if語句來檢查對象類型並進行映射。創建映射功能的調度器
我想在這裏學習一些新東西,所以我的問題是有其他方法來處理這種情況?
我有一個不同的對象類型(約15種不同類型)的數組,他們來自第三方系統。 對於我需要進行不同轉換的每種類型。 我最初的想法是與變換函數做一些接口,併爲每個類型創建一個類並運行它自己的實現。 但是,像這樣,我需要做一個非常大的if語句來檢查對象類型並進行映射。創建映射功能的調度器
我想在這裏學習一些新東西,所以我的問題是有其他方法來處理這種情況?
您是否考慮過使用Visitor的可能性?
如果您在使用的dynamic
結合訪問者模式,你可以得到一個非常簡單的實現沒有任何if
或switch
聲明,也不必手動創建型詞典與代表,或類似的替代品。
使用dynamic
您可以避免實現設計模式的「accept」部分,我認爲這對您很有用,因爲這些是您無法控制的外部類型。
含義,你創造的東西是這樣的:
public interface IVisitor
{
void Visit(OneType element);
void Visit(AnotherType element);
....
}
您實現客人,可以在以後通過調用執行:
visitor.Visit((dynamic)objectToTransform);
你可能不得不辦理有關沒有例外適當的過載爲Type
。
這將解決與爲每種類型執行單獨方法有關的問題的一部分。 現在,根據您每個人需要做什麼,如果您需要自動屬性映射,那麼AutoMapper可能非常有用。
您可以創建類型和改造的查找,類似於Java Front Controller pattern.
我不知道這是否是你想要的,但看看AutoMapper(或aother映射器)。它允許您輕鬆定義規則以將類型映射到其他類型。
但AutoMapper也需要if語句,因爲我需要指定我正在運行它的對象。 – 2012-07-11 06:43:44