2014-01-07 3 views
0

Мне нужно сохранить объекты, и я хочу, чтобы мои классы данных были максимально чистыми. Сохраненные классы не содержат кода бизнес-логики, а только данные с геттерами/сеттерами.Каков наилучший шаблон для сохранения объектов?

В настоящее время я реализую решение с шаблоном Observer. Каждый раз, когда объект Observable сохраняется, он вызывает сообщение объекту Observer, который заботится о сохранении. Таким образом, единственным ограничением для сохраняемого объекта должно быть «Наблюдаемое». Это держит вещи в чистоте.

Другим решением (возможно, лучше?) Было бы реализовать некоторый шаблон DAO, и я не очень хорошо знаю, как он работает. Возможно, это будет выглядеть как persistedObject.save(); или persistedObject.readById(id);. Но это означает, что я должен был бы определить некоторый интерфейс DAO, а затем реализовать метод read/create/update/delete в каждом сохраняемом классе.

+0

Просьба уточнить вопрос.Вы можете сохранить текстовый файл, базу данных, облако промышленной силы ... если вы не дадите больше информации о ваших потребностях, в целом нет «наилучшего сохранения». Что тебе нужно сделать?. – tucuxi

+0

В настоящее время я намерен сохранить объекты в файлах, используя сериализацию XML. Но в будущем я также могу использовать хранилище баз данных. Вот почему мне нужно использовать некоторый шаблон связи CRUD, позволяющий реализовать различный средний доступ к хранилищу (хранилище файлов, хранилище db и т. Д.) –

+0

Если вы планируете использовать сериализацию XML, я бы предложил JAXB – Gab

ответ

0

Существует много, много, . Ответы на многие вопросы на этот вопрос, сериализация данных или постоянство является основной проблемой в разработке программного обеспечения. Параметры включают использование баз данных, файлов с отображением памяти, двоичных и текстовых форматов и т. Д.

Мой личный фаворит для быстро сохраняющихся объектов - GSON, однако ваш прецедент будет определять, что лучше всего подходит для вас.

Вы упоминаете желание шаблонов проектирования для сохраняющихся объектов Java, и в то время как такие модели примерно столько же, сколько есть библиотеки, вот пара общих предложения:

  • Используйте неизменяемые объекты
  • Использования в transient ключевое слово для любых полей, которые не нужны для восстановления объекта
  • Избегайте определения проверок здравомыслия или иным образом ограничивающих диапазон допустимых значений в ваших объектах - экземпляр, созданный из вызова десериализации, может не корректно запускать ваши проверки, позволяя построить потенциально недействительные объекты.
  • Используйте ваши сериализуемые объекты для создания более сложных объектов, если вам нужна более тщательная проверка, например. сериализовать StubPerson POJO, и есть Person объекта, который может быть изготовлен из StubPerson только до тех пор, как значения заглушки являются действительными
+0

Мой вопрос был больше о том, «какой шаблон проектирования следует использовать для сохранения объектов Java», но в любом случае упомянутая вами библиотека является частью ответа для меня: это именно тот чистый подход, который я ищу, потому что «Gson может работать с произвольные объекты Java, включая ранее существовавшие объекты, у которых нет исходного кода. " Таким образом, не требуется выделенная аннотация, нет специального наследования выделенных классов. Благодарю. –

+0

@DariusPaulsen - Я добавил несколько предложений к моему ответу, это больше того, что вы искали? – dimo414

+0

Да, спасибо. –

0

Я не знаю, подходит ли он для вас, но так как у вас есть только классы фасоли вы может использовать Java persistence api.

+0

Я посмотрел на это, это, вероятно, чистый и осмысленный способ делать что-то, но в моем случае кажется, что это слишком сложно для этой цели. Мне просто нужен интерфейс create/read/update/delete для доступа к моим данным, независимо от того, как они хранятся (файлы json и xml, база данных ...) Мне придется писать разные адаптеры, но я в порядке с что. Во всяком случае, мой вопрос связан скорее с тем, как реализовать соответствующий шаблон дизайна для сохранения объектов Java. Спасибо, что ответили. –

0

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

Учитывая ваши потребности, вам, вероятно, придется связать его с каким-либо заводским шаблоном, чтобы управлять различными реализациями (адаптерами настойчивости).

Я не знаю ваших требований, но если ваше приложение может использоваться многими людьми одновременно, вам придется заботиться о параллельных доступах и определять политику (транзакцию, блокировку и т. Д.), Иначе люди перезаписывают данные друг друга).

Что касается вашего вопроса, я бы предложил JDO (с использованием data nucleus как реализация), но кривая обучения может быть слишком дорогой для ваших эффективных потребностей.

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