2010-08-17 2 views
2

В других вопросах, связанных с MVP на SO, люди говорят о том, что ведущий хранит информацию о состоянии (может быть состояние сеанса или состояние пользовательского интерфейса). Мне интересно, так как состояние в основном является «переходными данными», а целью модели является инкапсуляция доступа к данным, нельзя утверждать, что она хранится внутри модели? Существуют ли какие-либо эмпирические правила или плюсы и минусы при сохранении состояния в презентаторе по сравнению с моделью? Указывает ли шаблон MVP на использование презентатора?Где хранить состояние в архитектуре MVP

ответ

3

Целью модели является не инкапсуляция доступа к данным, а предоставление представления (модели) вашего домена, что бы это ни было. Иногда доступ к данным включается как часть модели (например, с доступом к данным типа Active Record), но чаще всего это отдельно. Например, когда я делал MVP в настольных приложениях, ведущий напрямую извлекал модель из базы данных или использовал repository - модель не имела никакого отношения к доступу к данным.

Где хранить состояние, связанное с просмотром, является немного серой областью, и в зависимости от того, какое приложение вы используете - для настольных приложений это намного проще, поскольку вы можете просто сохранить его в презентаторе, для веб-сайта приложения становятся немного сложнее. Вы можете рассмотреть отдельную модель для представления, которая может или не может обернуть основную модель (как в ViewModel в шаблоне MVVM, популярном в разработке .Net WPF).

+0

Да, я использую отдельную модель для представления. Я применяю MVP строго для клиента. Внутренний сервер - это просто служба без состояния и не имеет никакого отношения к пользовательскому интерфейсу. –

+0

Но это модель представления (например, предоставляет те же поля, которые у вас есть на представлении), или просто копию модели домена, которая используется на уровне презентации? Если это чисто модель представления, я бы сказал, что это больше MVVM, чем MVP, - хотя я не слышал, что это используется вне WPF, я полагаю, что нет причин, почему нет. В этом случае да, кажется, справедливое место для хранения данных с учетом состояния. Если это копия модели домена, которая используется для представления, я бы сказал, что ведущий должен ее обработать (как-то ..). (Я предполагаю, что данные не то, что вы обычно храните в модели). –

+0

Я думаю, что то, что я пытаюсь сделать, больше похоже на MVVM, потому что «состояние», о котором я говорю, чисто для текущего состояния представления. Вы подняли некоторые хорошие моменты, которые заставили меня понять это. Спасибо! –

3

Если состояние напрямую связано с представлением, то презентатором является подходящее место.

Если нет, модель, вероятно, является подходящим местом, но в некоторых случаях Презентатор может быть уместен.

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

Смежные вопросы