Является ли запах кода возвращением делегата, который пропускает детали реализации?

У меня есть класс под названием 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> и целью будет частный словарь. Считаете ли вы это запахом кода?

Я могу обернуть это анонимным методом, но я склонен считать, что это плохая форма, когда возможно преобразование группы методов.

1 ответ

Уровень усилий, связанных с поиском цели и метода вашего Map делегат примерно так же, как размышляя над полями MapBuilder сам класс; в любом случае, вызывающий абонент может обнаружить Dictionary пример.

Я не стал бы беспокоиться об этом с точки зрения MapBuilder учебный класс. Размышление над закрытыми полями определенно будет пахнуть кодом: но тогда это не ваша ответственность, а ответственность пользователя вашего класса.

Другие вопросы по тегам