Совместное использование модели в MVP Winforms App

Если бы свойство не имело средств доступа, как компилятор разделил бы его от поля? И что разделило бы его от поля?

5
задан Community 23 May 2017 в 10:27
поделиться

3 ответа

  1. Такой подход хорош. Однако, если вы хотите иметь сотни (даже тысячи!) Свойств, я думаю, у вас может быть класс God (антипаттерн). Хороших классов со 100 объектами не так много. Вместо этого подумайте о том, чтобы разбить вашу модель на более мелкие классы. Более того, вам не нужно создавать отдельное событие для каждого свойства. Если модель вообще изменена, вы можете запустить одно событие (которое может включать информацию, описывающую изменение), и представления могут обрабатывать его оттуда.
  2. Я бы избегал использования шаблона Singleton, если вы действительно не уверены, что хотите, чтобы он применять. Вместо этого измените конструктор для всех ваших представлений, чтобы он принимал экземпляр модели.
3
ответ дан 14 December 2019 в 19:19
поделиться

Remember, in any layered application, it's normal for the domain model to transcend all layers.

  1. Thus, I would have your presenter pass your Note instance to the view (which no doubt is a Control of some sort), and then let databinding through a BindingSource take over. Once you're using databinding, then the controls will automatically listen to the PropertyChanged event and update accordingly without the need for extra code on your part. Event-based notification is the appropriate use here no matter how many properties are being monitored as only the objects that care about the change will take action (vs. having many objects taking action unnecessarily).

  2. Typically, you get your entity instances from a lower layer. For example, you could implement a service that returns your Note instances. Anytime you ask that service for Note #3, it returns the same instance of Note that it created from persisted data. You could further more add another item to your business layer to supplement your presenters - it could be call a WorkItem or a Controller. All of your presenters could consult their WorkItem instance to get the current instance of Note upon which the user will be working.

I would consider looking into examples of how the Composite Application Block (or CAB) uses these patterns to create smart client applications. It's all design patterns and OO principles, the implementation of which is well worth the effort.

1
ответ дан 14 December 2019 в 19:19
поделиться
  • Вопрос 1: Реализация INotifyPropertyChanged кажется мне хорошей идеей. Вероятно, вы бы разделили многие свойства на некоторые классы.
  • К вопросу 2: В настоящее время я использую шаблон Singleton для совместного использования моей модели MVP с несколькими докладчиками. Я счастлив до сих пор, поскольку это гарантирует, что на самом деле существует только один экземпляр моей модели.
1
ответ дан 14 December 2019 в 19:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: