Ласкаво просимо на слизький схил. Ви до цього моменту зрозуміли, що існує нескінченна зміна всіх взаємодій із переглядом моделі. MVC, MVP (Taligent, Dolphin, Pasive View), MVVM лише для назви.
Модель Presenter Presenter Model, як і більшість архітектурних моделей, відкрита для різноманітності та експериментів. Єдине, що має всі спільні варіанти - це роль ведучого як "посередника" між поглядом та моделлю. Два найпоширеніших - це пасивний вигляд та контролюючий ведучий / контролер - [ фоулер ]. Passive View розглядає інтерфейс користувача як дуже неглибокий інтерфейс між користувачем та ведучим. Він містить дуже мало, за будь-якої логіки, делегуючи стільки відповідальності перед ведучим. Нагляд за ведучим / контролеромнамагається скористатися прив'язкою даних, вбудованою у безліч фреймворків інтерфейсу. Користувальницький інтерфейс обробляє синхронізацію даних, але подає презентатор / контролер для більш складної логіки. В будь-якому випадку модель, перегляд та презентатор утворюють тріаду
Існує багато способів зробити це. Дуже звичайно бачити цю обробку, розглядаючи кожен діалог / форму як інший погляд. Багато разів між переглядами та ведучими існує взаємозв'язок 1: 1. Це не важке, швидке правило. Досить поширеним є те, що один ведучий обробляє декілька пов'язаних поглядів або навпаки. Все залежить від складності погляду та складності бізнес-логіки.
Щодо того, як перегляди та презентатори отримують посилання один на одного, це іноді називають проводкою . У вас є три варіанти:
Перегляд містить посилання на презентатора
Форма або діалогове вікно реалізує подання. У формі є обробники подій, які делегують до презентатора, використовуючи прямі виклики функцій:
MyForm.SomeEvent(Sender)
{
Presenter.DoSomething(Sender.Data);
}
Оскільки ведучий не має посилання на вигляд, представлення даних повинно надсилати йому дані як аргументи. Ведучий може повертатись до режиму перегляду за допомогою подій / функцій зворотного дзвінка, які перегляд повинен слухати.
Презентатор містить посилання на перегляд
У сценарії подання відкриває властивості для даних, які він відображає користувачеві. Ведучий слухає події та маніпулює властивостями у поданні:
Presenter.SomeEvent(Sender)
{
DomainObject.DoSomething(View.SomeProperty);
View.SomeOtherProperty = DomainObject.SomeData;
}
Обидва мають посилання один на одного, утворюючи кругову залежність.
Цей сценарій насправді легше працювати, ніж з іншими. Перегляд відповідає на події, викликаючи методи презентатора. Ведучий читає / змінює дані з представлення даних через відкриті властивості.
View.SomeEvent(Sender)
{
Presenter.DoSomething();
}
Presenter.DoSomething()
{
View.SomeProperty = DomainObject.Calc(View.SomeProperty);
}
Є інші питання, які слід враховувати з моделями MVP. Порядок створення, час роботи об'єкта, де відбувається електропроводка, спілкування між тріадами MVP, але ця відповідь виросла досить довго.