У меня есть класс с именем MapBuilder<T>
, который внутренне использует Dictionary<PropertyInfo,string>
Класс используется для быстрого построения сопоставления свойств, которые будут проксированы.
Класс выглядит так:
public class MapBuilder<T>{
private Dictionary<PropertyInfo, string> m_Map = new Dictionary<PropertyInfo,string>();
public MapBuilder<T> Add<TProperty>(Expression<Func<T, TProperty>> property){
ArgumentValidator.AssertIsNotNull(()=>property);
var propertyInfo = Reflect.Property<T>.InfoOf(property);
m_Map.Add(propertyInfo, propertyInfo.Name);
return this;
}
public MapBuilder<T> Add<TProperty>(Expression<Func<T, TProperty>> property,string columnName){
ArgumentValidator.AssertIsNotNull(() => property);
ArgumentValidator.AssertIsNotNull(() => columnName);
var propertyInfo = Reflect.Property<T>.InfoOf(property);
m_Map.Add(propertyInfo, columnName);
return this;
}
public Map Compile(){
return m_Map.TryGetValue;
}
Таким образом, пользователь будет использовать его так:
var map= new MapBuilder<MyClass>()
.Add(x => x.Name)
.Add(x => x.Id)
.Add(x => x.Active)
.Compile()
Что бы построить карту, которая включает в себя 3 свойства Name, Id, Active. Проблема в том, что делегат Map
теперь может передавать детали реализации конечному пользователю, потому что он может наблюдать, что метод является TryGetValue
методом Dictionary<PropertyInfo,string>
, а целью будет частный словарь. Считаете ли вы это запахом кода?
Я могу обернуть это анонимным методом, но я склонен считать, что это плохая форма, когда возможно преобразование группы методов.