Mvvm - model class - каков "наилучший" способ доступа к закрытым членам и свойствам внутри класса?
Всем Привет!!
Первый вопрос здесь, так что полегче со мной, люди! ;-) Кроме того, имейте в виду, что я новичок с VS и VB, использую его уже полгода. Простите меня, если я использую неправильные термины, все еще очень новые для этого.
Ситуация:
Я разрабатываю vb.net настольное приложение в VS2017 с использованием шаблона MVVM. Все еще многому учусь, но добиваюсь хорошего прогресса, поэтому читаю здесь много статей!
До сих пор у меня есть свой уровень пользовательского интерфейса (комбинация окон, пользовательских элементов управления и интерфейсов), режимы просмотра и модели данных. Все еще нужно сделать уровень доступа к данным (или реализовать это в модели данных, пока не уверен).
Общая проблема:
Один аспект, который мне трудно "понять", - это когда использовать частное поле против свойства этого частного поля внутри сам класс. Воспользовался поиском, но не нашел подходящих ответов. Является ли наилучшим подходом использование членов свойства только для привязки или нет никакого "общего правила"?
Пример:
Класс модели Person имеет по умолчанию Ctor New() и реализует INotifyPropertyChanged и INotifyDataErrorInfo (через базовый класс). Я использую Ctor по умолчанию, потому что мне нужны данные времени разработки.
В Новой() я поставил перед членами собственность (номер и название), а не отдельным членам (_number и _name). Таким образом, события запускаются. При создании экземпляра класса Person в моей виртуальной машине и использовании Привязок в моем пользовательском элементе управления (и некоторых материалах XAML) Я получаю хорошие подсказки с сообщениями об ошибках при отображении окна/uc (выбор дизайна). Кнопки (привязка с командами ретрансляции) устанавливаются и обновляются. До сих пор это работает идеально, и программирование его "чувствует" себя хорошо.
Конкретная проблема:
Но затем, когда я загружаю список (функция Shared GetList() в классе модели), события запускаются для каждой новой записи при использовании Ctor по умолчанию (и если я устанавливаю свойства в GetList (), они даже запускаются во второй раз). Поэтому для загрузки списка я создал второй Ctor New (), который устанавливает закрытые члены. Потому что мне кажется "неправильным", что все эти события запускаются, когда они мне не нужны.
Это нормально делать? Использовать один конструктор для "инициализацию" и один конструктор для "загрузки". Или мне следует изменить способ использования закрытых членов и свойств?
Также не стесняйтесь публиковать свои мысли о "моей" реализации MVVM. Я не собираюсь использовать пуристский подход MVVM, я единственный разработчик, и так оно и останется. Но есть ли серьезные недостатки в том подходе, который я использую, или есть лучший подход? (Или я должен сделать новый вопрос для этого?)
(Когда я публиковал это, я не видел раздела для выбора, надеюсь, что он окажется в нужном месте)
Что я уже пробовал:
Создать конструктор по умолчанию и установить свойства
Создать второй конструктор и установить приватные поля