2011-08-03 7 views
0

ブックマークを持つWord文書を印刷する必要があります。また、プロパティがWord文書の1つ(または複数)のブックマークにマップされるドメインエンティティもあります。今、テストするために、我々は(fooは、ドメインエンティティである)switch文を持っている:ドメインエンティティプロパティをWordブックマークにマップする

private static string GetValueForBookmark(Bookmark bookmark, Foo foo) 
    { 
     // ToDo: Un-switch this. 

     switch (bookmark.Name) 
     { 
      case "dist": 
       return foo.Measurment.Distance; 
      case "serialNo": 
       return foo.SerialNumber; 
      default: 
       return string.Empty; 
     } 
    } 

私は枠組みの中でのFooのプロパティに属性を追加することが嫌いです。ドメインエンティティはこれらの一回限りのアプリケーションの必要性についてすべて知ってはいけないので、面倒で間違っているようです。

1つのアイデアは、ドメインエンティティプロパティにブックマーク名のマッピングを作成することです。ブックマーク名を表す列挙型を作成し、ドメインエンティティプロパティを表す属性をこれらの列挙型要素に追加することもできます。属性はこれらのプロパティを指定する必要があり、それができるかどうかわかりません。ここで表現木を使用できますか?

別のオプションはありますか?ドメインエンティティのプロパティを文字列リテラルにマップするだけです。

これを解決する最良の方法は何ですか?

答えて

0

私はこれで行きました:

private static void MapBookmarksToFooProperties() 
    { 
     if (_bookmarkToFooPropertyMapping != null) { return; } // We already created the mapping. 

     _bookmarkToFooPropertyMapping = new Dictionary<string, Func<Foo, string>>(); 

     // Associate Word document bookmarks to their properties within a Foo object. 

     _bookmarkToFooPropertyMapping.Add("dist", foo => foo.Measurment.Distance); 
     _bookmarkToFooPropertyMapping.Add("serialNo", foo => foo.SerialNumber); 
     // More mapping here 
    }  

を次に、それをアクセスし、このように簡単です:

return _bookmarkToFooPropertyMapping[bookmark.Name](foo); 
関連する問題