2010-09-25 5 views
3

Я довольно далеко от своего первого приложения для Android, и у меня есть подозрительное подозрение, что я «Делая это неправильно». Мое приложение разговаривает с сервером Ruby on Rails и сериализует объекты взад и вперед через XML. Прежде чем я узнал, что происходит, я обнаружил, что очень сильно нахожусь в написании своей собственной дерьмовой ORM, что усугубляется тем фактом, что я не писал ни одну Java со школы.Обработка/постоянство объектов Android

Мой конфликт заключается в том, что я хочу, чтобы мое клиентское приложение (android) было способно сериализоваться с помощью различных методов, таких как HTTP/XML, в локальную базу данных или в локальную файловую систему. Я начал с шаблона стратегии, но я чувствую, что мое решение плохо отсутствует.

Во-первых, следует ли повторно выполнить все проверки модели Rails на стороне клиента, потому что я не знаю, буду ли я всегда работать с Rails с другой стороны? Еще большая проблема заключается в том, что прямо сейчас я могу представлять только плоские объекты в качестве значений ключа, так как мой код не может обрабатывать вложенные объекты, такие как истинный ORM.

Я уверен, что Android-разработчики постоянно работают с этим, поэтому мне интересно узнать, что делают другие люди, чтобы справиться с этими проблемами.

+0

Когда вам приходится сериализовывать объекты, это обычно означает, что вы должны переоценить свой дизайн – Falmarri

ответ

1

Я бы не приблизился к вашему Android-приложению как к расширению приложения Ruby, а скорее к потребителю API. Если вы попытаетесь разоблачить свое серверное приложение как JSON (или другой формат, но JSON - самый легкий) и потребляете эти API из приложения Android, у вас, скорее всего, будет меньше проблем, поскольку JSON уже находится в формате K/V.

Я еще не писал Android-объекты для SQLite, но я написал их как Parcelable objects, так и SharedPreferences. Обе эти стратегии достаточны для приложений с малым и средним диапазоном. Для приложений с интенсивным использованием данных, очевидно, вам придется сделать еще один шаг к SQLite.

Для этих подходов есть несколько замечательных статей: Managing State.

Это сводится к проектированию ваших объектов так, чтобы их можно было легко сериализовать. Это означает отсутствие круговых ссылок или чрезвычайно сложных объектов. Это не должно быть очень большой проблемой, особенно если ваши данные уже находятся в формате JSON. Вам просто нужно расширить некоторые классы и добавить функции, которые возвращают представление объекта Parcelable или строковое представление, чтобы ваши объекты могли быть сохранены таким образом.

Я бы избегал клонирования ваших серверных объектов и проверки в Android, так как тогда вам необходимо изменить оба источника, если вы вносите небольшие изменения. Сервер должен обрабатывать все данные и валидацию, и вам просто нужно запрашивать, кэшировать и отправлять данные с Android.

Мне было бы интересно услышать, есть ли какие-либо проблемы с записью объектов в SQLite, но я полагаю, что это не намного больше от деталей, описанных выше. Надеюсь, это поможет в некоторой степени!

0

Я думаю, что вы, возможно, слишком тяжелы для смартфона. Я бы посмотрел на использование веб-сервисов в стиле RESTful с контентом JSON.

0

Я не делал много хранения на Android, но я думаю, вам нужно использовать SQLiteDatabase и создать собственный Cusor, который делит/сериализует ваш объект, чтобы его можно было добавить в базу данных. Возможным решением будет расширение SQLiteCursor или AbstractCursor.

В противном случае я не думаю, что есть другое решение, кроме, возможно, «хардкор» Serializabled (который я подозреваю, что это может быть слишком много для телефона, я могу ошибаться)

0

Глядя на ваш вопрос возникло ощущение, что, может быть, вы просто слишком усложняете свои требования? Почему вы не можете использовать формат JSON для представления данных объектов переносимым образом? Затем вы сможете просто сохранить его либо в файловой системе, либо в базе данных в простом текстовом поле. Вы можете использовать андроидную библиотеку активной записи для прозрачного сохранения БД (http://code.google.com/p/android-active-record)

1

Hessian отлично подходит для RPC. Вам не нужно выполнять сериализацию самостоятельно. Он не использует XML, поэтому он более эффективен и более подходит для мобильной платформы.

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