2016-08-07 5 views
2

Иногда в моих моделях я реализую только свойства «Has» (например, HasDescription), поэтому я могу легко проверить правильность свойства из-за пределов моей модели с помощью if (model.HasDescription) { ... }.«Хорошая практика»?

Реализация может выглядеть примерно так:

public bool HasDescription => Description != null && Description != string.Empty; 

Это хорошая практика? Точнее, если я возьму этот подход, я должен переместить эту условную логику в другом месте? Возможно, в методах расширения?

+1

Другим подходом может быть использование метода расширения с помощью выражения LinqExpression, такого как '.Has (m -> m.Description)'. –

+2

В первую очередь оппонент -> для закрытия. – HimBromBeere

+0

@HimBromBeere Brutal. Каково ваше «мнение» по этому вопросу, прежде чем закрыть его? –

ответ

1

Это вопрос личных предпочтений; наличие связки свойств HasX может быть в порядке. Я иногда делаю это по причинам проверки (я нашел, что это хорошо работает, чтобы использовать такое свойство для приложения MVC при использовании FoolProof). Это может быть громоздким, чтобы добавить кучу свойств HasX, хотя ... Итак, если вы используете их для оценки в своем контроллере, это вопрос личных предпочтений. Если это подход, который вы хотите предпринять, я бы не стал беспокоиться об этом.

Если вы используете его для проверки, иногда, когда вам нужна оценка на основе модели, вы можете использовать метод IsValid для определения статуса проверки. Это будет больше MVVM-подобных, чем MVC-подобных, но он работает.

0

Has является полностью законным. Однако логика принадлежит разработчику или конструктору: решите способ представления недостающего свойства (null или string.Empty, предпочтительно null, но определенно не оба). Это оставляет логику Has для проверки на null.

Одно соображение в пользу снижения Has всего есть возможность использовать оператор ??. Если прецеденты позволяют заменить

var xyz; 
if (x.HasXyz) { 
    xyz = h.Xyz; 
} else { 
    xyz = defaultValueOfXyz; 
} 

с

var xyz = h.Xyz ?? defaultValueOfXyz; 

, то вы можете оставить HasXyz вообще.

Смежные вопросы