В других вопросах, связанных с MVP на SO, люди говорят о том, что ведущий хранит информацию о состоянии (может быть состояние сеанса или состояние пользовательского интерфейса). Мне интересно, так как состояние в основном является «переходными данными», а целью модели является инкапсуляция доступа к данным, нельзя утверждать, что она хранится внутри модели? Существуют ли какие-либо эмпирические правила или плюсы и минусы при сохранении состояния в презентаторе по сравнению с моделью? Указывает ли шаблон MVP на использование презентатора?Где хранить состояние в архитектуре MVP
ответ
Целью модели является не инкапсуляция доступа к данным, а предоставление представления (модели) вашего домена, что бы это ни было. Иногда доступ к данным включается как часть модели (например, с доступом к данным типа Active Record), но чаще всего это отдельно. Например, когда я делал MVP в настольных приложениях, ведущий напрямую извлекал модель из базы данных или использовал repository - модель не имела никакого отношения к доступу к данным.
Где хранить состояние, связанное с просмотром, является немного серой областью, и в зависимости от того, какое приложение вы используете - для настольных приложений это намного проще, поскольку вы можете просто сохранить его в презентаторе, для веб-сайта приложения становятся немного сложнее. Вы можете рассмотреть отдельную модель для представления, которая может или не может обернуть основную модель (как в ViewModel в шаблоне MVVM, популярном в разработке .Net WPF).
Если состояние напрямую связано с представлением, то презентатором является подходящее место.
Если нет, модель, вероятно, является подходящим местом, но в некоторых случаях Презентатор может быть уместен.
Ключи здесь в том, что представление и презентатор концептуально связаны друг с другом - в то время как Презентатор может не знать о конкретном представлении, обычно ему приходится выставлять конкретные данные для просмотра, которое он обслуживает.
- 1. Где хранить состояние сеанса?
- 2. MVP Android - Где сохранить состояние просмотра?
- 3. где хранить состояние на сервере
- 4. Где хранить общественное состояние пользователя в Meteor?
- 5. Где хранить редукторы влияет глобальное состояние
- 6. Где я могу хранить внутреннее состояние?
- 7. MassTransit - где хранить состояние между повторами
- 8. MVP. Где хранить кеш-презентатор при воссоздании активности?
- 9. Состояние дел в WebAssembly MVP в браузерах
- 10. В MVP, где писать валидации
- 11. MVP в приложении для Android - состояние ведущего
- 12. Как установить состояние управления в MVP
- 13. Получить текст ошибки из strings.xml для модели в архитектуре MVP
- 14. Как обрабатывать экземпляры служб и событий в архитектуре GWT MVP?
- 15. Совместное однонаправленное состояние в многопотоковой архитектуре плагинов
- 16. Где хранить состояние элементов управления лентой в Word 2010 addin
- 17. Где хранить переходное состояние пользовательского интерфейса в Ember 2.0
- 18. Где хранить настройки/состояние приложения в приложении MVVM
- 19. Где разместить BroadcastReceiver в Android MVP?
- 20. Где хранятся файловые операции в MVP?
- 21. Web Dev - Где хранить состояние объекта, подобного магазинной тележке?
- 22. Sequilize/Umzug: где хранить состояние схемы базы данных?
- 23. Где сохранить бизнес-логику в архитектуре MVC?
- 24. Где находится API, расположенный в архитектуре MVC?
- 25. Где бросить исключение в многоуровневой архитектуре?
- 26. Где разместить языковые переводы в многоярусной архитектуре
- 27. В трехслойной архитектуре, где находится шаблон DAO?
- 28. Где разместить интерфейсы в компонентной архитектуре?
- 29. MVP нерест MVP подкомпонента
- 30. Состояние внутри Linq Где состояние
Да, я использую отдельную модель для представления. Я применяю MVP строго для клиента. Внутренний сервер - это просто служба без состояния и не имеет никакого отношения к пользовательскому интерфейсу. –
Но это модель представления (например, предоставляет те же поля, которые у вас есть на представлении), или просто копию модели домена, которая используется на уровне презентации? Если это чисто модель представления, я бы сказал, что это больше MVVM, чем MVP, - хотя я не слышал, что это используется вне WPF, я полагаю, что нет причин, почему нет. В этом случае да, кажется, справедливое место для хранения данных с учетом состояния. Если это копия модели домена, которая используется для представления, я бы сказал, что ведущий должен ее обработать (как-то ..). (Я предполагаю, что данные не то, что вы обычно храните в модели). –
Я думаю, что то, что я пытаюсь сделать, больше похоже на MVVM, потому что «состояние», о котором я говорю, чисто для текущего состояния представления. Вы подняли некоторые хорошие моменты, которые заставили меня понять это. Спасибо! –