Я использую Core Data для хранения объектов. Какая для меня наиболее эффективная возможность (т.е. лучшая эффективность выполнения, минимум необходимого кода, максимальная простота и максимальная совместимость с существующими функциями / библиотеками / фреймворками) хранить разные значения атрибутов для каждого объекта в зависимости от контекста, зная, что контексты не могут быть предопределено, будет легион и постоянно редактируется пользователем?

Пример:

Объект - это человек (потенциально = работодатель / = сотрудник)

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

Таким образом, одним из атрибутов моего объекта будет «Должность против работодателя против окончания года».

Лучшее, что я мог сделать со своими текущими знаниями, - это сохранить все три элемента вместе в виде строки, которая будет значением атрибута, назначенным каждому объекту, и постоянно анализировать эту строку, чтобы иметь возможность ее использовать, но это имеет следующие (ОГРОМНЫЕ) недостатки :

(1) Чрезмерно замедленное выполнение и повышенное потребление энергии. Использование этого контекстного атрибута лежит в основе основной функции моего будущего приложения (так что он будет использоваться буквально 10-100 раз в минуту). Необходимость постоянно анализировать эту информацию, чтобы иметь возможность использовать ее, добавляет ненужную обработку, которой я бы очень хотел избежать (2) Излишние накладные расходы на кодирование. Сохранение этого контекстного атрибута в виде строки излишне потребует дополнительного кодирования для меня каждый раз, когда я буду использовать эту центральную информацию (то есть очень часто). (3) Чрезмерная сложность и потенциальная несовместимость. Это также добавит чрезмерной сложности и, отклонившись от ожидаемой практики, лишится преимуществ Core Data.

Что было бы наиболее эффективным способом достижения моей намеченной цели без вышеупомянутых недостатков?

4
anniina 2 Дек 2018 в 00:48

1 ответ

Лучший ответ

В вашем примере один из вариантов - создать объект Employment с атрибутами для title и yearEnded и двумя (к одному) отношениями с Person. Одно отношение представляет employer, а другое - employee.

Обратные отношения в обоих случаях - ко многим. Один представляет собой занятость, где Человек является сотрудником (так что вы можете назвать его employmentsTaken), а другое отношение представляет собой должности, где Человек является Работодателем (так что вы можете назвать его employmentsGiven).

В общем, это решение, рекомендованное Apple для отношений "много-много", имеющих атрибуты (см. «Моделирование отношений на основе его семантики» в их документация).

Решит ли это все проблемы, перечисленные в вашем вопросе, я оставляю на ваше усмотрение: если что-то меняется 10–100 раз в минуту, накладные расходы на запросы на выборку и создание / обновление / удаление промежуточного звена (Employment) entity может быть хуже, чем ваше строковое представление.

4
pbasdf 2 Дек 2018 в 14:35