Прозрачное хранение состояния класса без демонстрации реализации - PullRequest
0 голосов
/ 06 мая 2010

У меня есть класс модели (MVC), внутреннее состояние которого (которое в основном содержит частные int поля) я хочу сохранить.

Программа работает на Android (на данный момент), поэтому мне нужно сохранить ее в Bundle, но позже я буду использовать тот же класс в настольном приложении, где мне придется хранить состояние в другом Кстати, я не могу ссылаться на Bundle непосредственно в моем классе.

Итак, мой вопрос: как лучше всего хранить (и извлекать) состояние класса, не подвергая его реализации?

Лучшее, что я мог подумать об удалении модификатора доступа private, чтобы поля становились доступными для пакета и создавали вспомогательные классы для чтения / записи в одном и том же пакете, но это почему-то кажется неправильным.

Ответы [ 2 ]

1 голос
/ 06 мая 2010

Я не знаком с механизмами персистентности в Android, но в целом неплохо отделить вашу логику персистентности (то есть код, который хранит состояние объектов) от объектов домена, которые на самом деле содержат данные. Таков подход, используемый JPA и практически всеми современными инструментами объектно-реляционного отображения в Java, например. Так что да, ссылка на объекты Bundle непосредственно в классах вашего домена не похожа на правильную стратегию, особенно если вы планируете использовать те же классы и в среде, отличной от Android.

Мой совет - сериализовать состояние объекта в XML, который переносим между средами. Существует множество инструментов с открытым исходным кодом, которые помогают упростить эту задачу и не требуют никакого специального кода в ваших классах домена. Два, с которыми я больше всего знаком, это JiBX и Castor . Я не знаю, будет ли любой из них работать на Android, но даже если у Android есть свои собственные инструменты для преобразования объектов в XML и из XML, вы все равно сможете использовать JiBX или Castor на настольных компьютерах, поскольку они могут адаптироваться к различным Форматы XML.

Получив данные в форме XML, вы можете сохранить их, используя любые средства, наиболее подходящие для целевой среды. В настольном приложении это, вероятно, означает файлы в домашнем каталоге пользователя. На Android, я думаю, это будут пакеты, но это не моя область знаний. Удачи!

0 голосов
/ 06 мая 2010

Взгляните также на схему моста: http://en.wikipedia.org/wiki/Bridge_pattern Как сказал Роб, вам необходимо отделить постоянство от объектов данных, чтобы вы могли обрабатывать данные равномерно и использовать мост для обработки постоянства на разных платформах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...