Мне интересно об этом.Я пытался создать программу для Android, которая в качестве части своей конструкции использует шаблон стиля «MVC» (Model-View-Controller) для структурирования пользовательского интерфейса и логики, как обсуждалось здесь:
https://medium.com/upday-devs/android-architecture-patterns-part-1-model-view-controller-3baecef5f2b6
и, кажется, натолкнулся на загвоздку.В частности, в связанной статье говорится, как «фрагменты» и «действия» Android могут использоваться в качестве «представлений» шаблона MVC, что, кажется, имеет некоторый смысл, однако, пытаясь это сделать, я запускаюв трудности.В частности, компоненты Controller и Model должны либо знать View, либо наоборот, однако фрагменты и действия Android могут создаваться и уничтожаться динамически системой, а не только кодом пользователя (например, при переключении на другое приложение).Это приводит к вопросу о том, как сохранить ссылки на другие объекты компонента MVC при таких динамических разрушениях и воссозданиях, и я не уверен, что нашел удовлетворительное решение.
Одна из возможностей заключается в том,попытаться использовать функцию "setArguments" для фрагмента.Однако проблема в том, что он принимает «Bundle», в который вы не можете просто вставить любую старую ссылку на Java-объект, но вы скорее должны предоставить ему что-то специально сделанное, например, «Parcelables».Однако проблема заключается в том, что он эффективно тянет за собой необходимость создания набора кода сериализации, который в конечном итоге заражает остальную часть шаблона MVC и, таким образом, кажется, что загрязняет некоторые из его целей проектирования, таких как ограничение / инкапсуляция объема сохраняемых данных.логика (см., например, верхний пост здесь: - где упоминается, что «модельная» часть MVC должна быть не единственным классом, а мета-категорией трех типов объектов, один из которых называется «Data Mappers»).", специально для сохранения / восстановления).Не говоря уже о том, что с точки зрения общего ООП вам не нужно изменять объект, такой как Контроллер или Модель, просто потому, что у некоторых типов представления (например, фрагментов) есть забавный выбор, как сохранять ссылки, по сравнению, скажем, с другим типом (например, если представление (MVC) было просто логгером или чем-то другим, а не фрагментом Android), так как это, похоже, приводит к утечке знаний о деталях, которые следует абстрагироваться от необходимости видеть их этими частями.
Второйопция заключается в сохранении всех соответствующих элементов, таких как объекты модели, контроллеры и т. д., в некотором глобальном реестре объектов, который затем позволяет получить к ним доступ с помощью некоторого простого дескриптора (например, строки или целочисленного значения), который затем передается во фрагментили Активность, о которой идет речь, через setArguments ().Это позволило бы избежать упомянутых проблем утечки знаний, но, разумеется, оно является глобальным и дает возможность злоупотреблять им для доступа к вещам, к которым у вас нет доступа.
Так что же такоелучший способ справиться с этим?