Лучшая практика? - Массив/Словарь как Базовый [закрытый] Атрибут Объекта Данных

Используйте Linux! У меня обычно есть другая проблема: разработка win под linux. Нет никаких оснований этого не делать: у меня есть победитель, работающий на виртуальном боксе почти все время. Linux поставляется с большим количеством инструментов разработки.

Проблема в том, что:

это графический интерфейс? - Если нет, у вас не будет проблем, как только ваш код STD / Portable. (X позволяет вам и простые вещи, но для хорошего приложения сегодня вам нужно немного больше.) - Если да, то у вас будет много проблем, когда вы на самом деле перенесете код на работающую платформу.

Должен ли он быть переносимым / заменяемым между Linux и Windows? - если нет, просто разработайте на родной ОС. Намного меньше боли. У вас есть Eclipse для обеих платформ. Даже если вы подумаете перенести код на более позднюю стадию, просто сначала выполните работу для него.

Я разработал несколько графических приложений под Linux, которые сейчас используются только под Windows. Мой рецепт: GTK / GNOME. Я сделал это с Cygwin и Mingw. Но я думаю, что в Qt тоже есть такая же полезная среда. Мой код вышел на победу без изменений! [хорошо ... пару касаний путей к файлам ... но это была ошибка ..]

Нет способа развиваться под win и надеяться работать на linux, если вы не уверены, что не используете какой-либо выиграть libs. То есть: в графическом приложении практически нет шансов. Или много проверок ... Или вы не будете использовать выигрышные средства. Забудьте Visual Studio.

Проверьте, действительно, вино и страницы winehq.

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

Итог: портировать бесплатный код на win проще, чем проприетарный код на свободном рынке.

бис F

175
задан RunLoop 1 June 2012 в 10:37
поделиться

1 ответ

В Core Data нет "собственного" типа массива или словаря. Вы можете сохранить NSArray или NSDictionary как трансформируемый атрибут. Это будет использовать NSCoding для сериализации массива или словаря в атрибут NSData (и надлежащим образом десериализовать его при доступе). Преимущество такого подхода в том, что это просто. Обратной стороной является то, что вы не можете запрашивать массив или словарь (он хранится как большой двоичный объект в хранилище данных), и если коллекции большие, вам, возможно, придется переместить много данных в / из хранилища данных (если это хранилище данных SQLite) просто для чтения или изменения небольшой части коллекции.

Альтернативой является использование отношений Core Data to-many для моделирования семантики массива или коллекции словарей. Массивы проще, поэтому начнем с этого. Отношения Core Data со многими на самом деле моделируют набор, поэтому, если вам нужна функциональность, подобная массиву, вы должны либо отсортировать набор (с помощью свойства выборки - удобный способ сделать это), либо добавить дополнительный атрибут индекса к сущности который хранит элементы массива и самостоятельно управляет индексами. Если вы храните однородный массив (все записи одного типа), легко смоделировать описание сущности для сущностей массива. Если нет, вам придется решить, использовать ли трансформируемый атрибут для хранения данных элемента или создать семейство сущностей элементов.

Моделирование словаря, вероятно, потребует отношения ко многим с набором сущностей, в которых хранится ключ и значение. И ключ, и значение аналогичны сущности элемента для массива, описанной выше. Таким образом, они могут быть либо собственными типами (если вы знаете их заранее), либо трансформируемым атрибутом, либо отношением к экземпляру из семейства сущностей, зависящих от типа.

Если все это звучит немного пугающе, это так. Вставить произвольные данные в структуру, зависящую от схемы, такую ​​как Core Data, сложно.

Для структурированных данных, таких как адреса, почти всегда легче потратить время на явное моделирование объектов (например, атрибут для каждой части адреса). Помимо отказа от всего лишнего кода для моделирования словаря, это упрощает ваш пользовательский интерфейс (привязки будут «просто работать»), а логику проверки и т. Д. - намного яснее, поскольку большая часть этого может обрабатываться Core Data.

Обновление

Начиная с OS X 10.7, Core Data включает тип упорядоченного набора, который можно использовать вместо массива. Если вы можете настроить таргетинг на 10.7 или новее,

245
ответ дан 23 November 2019 в 20:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: