Get Gets vs Get Methods при использовании MVC или аналогичного шаблона? - PullRequest
1 голос
/ 24 июня 2011

Не то чтобы это действительно имело значение, но я хочу следовать лучшим практикам. При создании моделей просмотра считается ли наилучшей практикой использование методов или методов получения свойств? * 1001 например *

public class ProductViewModel
{
    private readonly Product _product;

    public ProductViewModel(Product p)
    {
        _product = p;
    }

    public string Price
    {
        get { return string.Format("${0}" _product.Price.ToString("N2") };
    }
}

Учитывая, что это простой пример, лучше ли использовать метод?

public string GetPrice()
{
    return string.Format("${0}" _product.Price.ToString("N2");
}

Каковы плюсы / минусы между двумя?

Ответы [ 4 ]

3 голосов
/ 24 июня 2011

Если вы используете MVVM, то вы используете привязку данных. Привязка данных привязывает к свойствам, а не к методам. (См. Документацию по свойству Binding.Path - на этой странице нет ни одного вхождения слова «метод». Все дело в свойствах.)

Так что нет конкурса. Используйте свойства, потому что это то, что поддерживает система привязки.

1 голос
/ 24 июня 2011

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

Используя метод вместо свойства, вы производите разводку вида и модели вида без ключа.

Скажем, вам нужна эта цена где-то еще, сохраняя ее в старом коде, но без нового кода. При использовании метода вам теперь понадобится другой метод или свойство, чтобы получить цену. Со свойством вы можете просто применить StringFormat к первой привязке .

<!-- Old code -->
<TextBlock Text="{Binding Price}" />

<!-- New code -->
<TextBlock Text="{Binding Price, StringFormat=${0:N2}}" />
<awesome:MoneyUpDown Value="{Binding Price}" />
1 голос
/ 24 июня 2011

Если вы используете MVVM, скорее всего, вам нужна поддержка INotifyPropertyChanged, и в этом случае лучше всего использовать свойства.Существует ряд платформ (например, Caliburn.Micro), которые помогают минимизировать количество повторяющихся кодов, таких как подключение уведомлений.

Первоначальный вопрос касался шаблона MVVM.С простым MVC (без привязки данных) ответ не так однозначен.Лично я все равно использовал бы свойство над методом при получении простых данных, когда не требуется никаких дополнительных вычислений или доступа к данным.

0 голосов
/ 24 июня 2011

Одно предостережение с первым методом заключается в том, что вам нужно реализовать второе свойство, чтобы иметь возможность получить цену без форматирования

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...