Прослушивание событий PropertyChanged для бизнес-логики - PullRequest
0 голосов
/ 10 сентября 2018

Мой вопрос может быть субъективным, и извините, если он есть.

Мы разрабатываем приложение UWP с некоторой функцией автосохранения, чтобы каждый раз, когда пользователь что-то обновлял, сохранялся весь объектв файловую систему.

Для этого я использовал интерфейс INotifyPropertyChanged, чтобы определить, когда свойство изменяется в моем объекте или с событием PropertyChanged в дочерних объектах, если это необходимо.,И когда изменение появляется через двухстороннее связывание данных, я сохранял весь объект.Примерно так (код может содержать опечатки, не являющиеся представителями реального кода):

public class ObjectViewModel : ViewModelBase // from MVVM-Light
{
    public ObjectViewModel()
    {
        Section1 = new SectionViewModel();
        Section1.PropertyChanged += SectionOnPropertyChanged();
        Section2 = new SectionViewModel();
        Section2.PropertyChanged += SectionOnPropertyChanged();
    }

    public SectionViewModel Section1 { get; set; }

    public SectionViewModel Section2 { get; set; }

    private void SectionOnPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        RaisePropertyChanged();
    }
}

public class SectionViewModel : ViewModelBase // from MVVM-Light
{
    private string _myString;
    public SectionViewModel()
    {
        Property1 = new SubPropertyViewModel();
        Property1.PropertyChanged += SubPropertyOnPropertyChanged();
        Property2 = new SubPropertyViewModel();
        Property2.PropertyChanged += SubPropertyOnPropertyChanged();
        MyString = "some value";
    }

    public string MyString
    {
        get => _myString;
        set => Set(ref _myString, value);
    }

    public SubPropertyViewModel Property1 { get; set; }

    public SubPropertyViewModel Property2 { get; set; }

    private void SectionOnPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        RaisePropertyChanged();
    }
}

Теперь я могу прослушать событие PropertyChanged моего ObjectViewModel, чтобы сохранить его.Зная, что свойство MyString имеет двустороннюю привязку к TextBox.И Property1 & 2 имеют двустороннюю привязку к пользовательскому UserControl (что-то вроде RadioButton).

Но мой коллега сказал мне, что события PropertyChanged были использованы для привязки, и это плохопрактиковаться в привязанности к ним, делать бизнес логику.И он удалил прослушивание PropertyChanged, добавил прослушиватель для события Tapped для UserControl и отправил пользовательский Message через Messenger.То же самое для строки, куда он отправляет кастом Message при изменении.

Я действительно не большой поклонник его модификаций.

Это плохая практика, чтобы слушать PropertyChanged событие для бизнес-логики?

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

По моему мнению, если вы знакомы с MVVM, вы должны использовать команды, определенные в вашей ViewModel, чтобы реагировать на действия пользователя и описывать свою бизнес-логику на уровне модели. Свойства, которые используются в привязках и PropertyChangedEvent, не должны содержать бизнес-логики, поскольку в будущем это может замедлить процесс разработки, превратившись в «код спагетти», так как вы добавите больше функций и вам будет трудно исследовать зависимости между свойствами.

0 голосов
/ 10 сентября 2018

PropertyChanged и постучал обо всех обратных вызовах, ни один из них не является хорошей или плохой практикой, поэтому это полностью зависит от того, как вы разрабатываете свое приложение, если вы уже делаете это с PropertyChanged , тогда продолжайте делать это, в этом нет никакого вреда. С другой стороны, прослушиваемое событие также будет одинаково эффективным, поэтому, отвечая вашему конкретному сценарию:

"НЕТ! Собственность, измененная для бизнес-логики, не плохая практика.

...