В настоящее время я создаю довольно сложное приложение AngularJS, которое хранит данные в базе данных sqlite. Мои данные приложения содержат ссылки на объекты, которые используются во всем приложении. Angular способен отображать эти данные, сравнивать их, и до сих пор все было в порядке.Сохранение ссылок на объекты в JSON
Что я имею в виду под этим? Проверьте этот пример для «шаблона» объектов в моем приложении.
var Person = {
name:'some person',
owns:[]
}
var Cat = {
name:'some cat'
}
var project = {
name:'some project',
people:[],
cats:[]
}
Мое приложение позволит пользователям создавать и управлять этими объектами и создавать отношения между ними. Могут быть созданы экземпляры Person
, и каждый объект Person
может хранить ссылки на экземпляры Cat
.
Как вы, возможно, уже догадались, мой project
в конце концов будет выглядеть так, как только пользователь будет манипулировать им.
var project = {
name:'some project',
people:[person, person, person],
cats:[cat, cat cat, cat, cat, cat]
}
console.log(project.people[0].owns)
//logs something like "cat, cat, cat". These are references.
Мое приложение затем открывается вид на установленный для просмотра каждого person
и перечислить на owns
свойство, которое содержит экземпляры Cat
.
Все хорошо в денди, пока я не понял, что могут быть сложности, хранящие это как JSON в базе данных. JSON.Stringify()
и angular.toJSON()
не рассматривают ссылки как ссылки, вместо этого они читают их как отдельные объекты.
Я надеюсь получить некоторые сведения о наилучшем способе сохранения этих отношений/ссылок.
Вот два варианта, которые, я считаю, у меня есть.
Вариант 1: Отмените идею сохранения этого в JSON и используйте реляционную базу данных для хранения всего. Это не идеально, потому что он начинает утихать при гибком характере рендеринга объектов в AngularJS. Кроме того, эти данные будут храниться в нескольких местах (онлайн & локально), что может привести к различиям в схеме базы данных, которая будет отлаживать кошмар.
Вариант 2: Магазин уникальный идентификатор с каждым экземпляром Person
и Cat
. Затем я могу использовать этот идентификатор при рендеринге и создании ассоциаций. Это будет работать, если я создаю пользовательские фильтры в Angular, но глобально удаляя ссылки, когда объекты будут удалены, может стать кошмаром.
Я действительно не знаю, как эти JSON DB хранят свои данные, но разве у вас уже нет бесконечной проблемы с регрессом, когда вы пытаетесь сериализовать «Фред владеет Дино» наряду с «Дино принадлежит Фреде»? Таким образом, это даже не вопрос поиска, но, похоже, нет четкого способа их хранения, если БД уже не создает ссылки для вас ... Или я пропустил что-то фундаментальное? –
Вы правы Скотта, я отредактировал свой вопрос, чтобы отразить вашу озабоченность. В моем приложении (и в приведенном выше примере) это односторонние отношения. «owned_by» не понадобился, и я сначала пропустил это. – lostPixels
С этим я считаю, что некоторые из механизмов хранения JSON, таких как Mongo и Couch, будут хранить достаточное количество метаданных для восстановления этих отношений при поиске объекта 'project'. Но я не знаю о sqllite. То, что они не будут извлекать, - это любые функции конструктора, которые вы могли бы использовать для создания этих объектов. Если вы используете только простые объекты JS, это вообще не повредит. –