Документирование атрибутов сущностей Data Data Data с элементами информации пользователя

Мы ищем способ документировать объекты Core Data. До сих пор единственными реальными вариантами, которые я придумал, являются:

  • Документ внешне с использованием UML или другого стандарта
  • Создайте подклассы NSManagedObject для каждого объекта и используйте комментарии к коду
  • Используйте словарь пользовательской информации для создания пары значений ключа, содержащей строковый комментарий

Вариант 1 чувствует себя слишком много дополнительной работы и что-то, что почти наверняка будет устаревшим в 99% случаев.

Вариант 2 чувствует себя естественным и более правильным, чем вариант 1. Самая большая проблема заключается в том, что эти комментарии могут быть потеряны, если этот класс модели регенерируется с использованием Xcode.

Вариант 3 чувствует себя немного менее корректным, чем вариант 2, но имеет дополнительное преимущество добавления возможностей автоматизации в отношении извлечения метаданных. Например, в одном из наших приложений нам нужно внимательно следить за тем, что мы храним локально на устройстве, а также синхронизироваться с iCloud. Используя словарь пользовательской информации, довольно легко автоматизировать создание какой-либо формы артефакта, которая может быть проверена как внутри, так и снаружи (по клиенту) для соответствия

Итак, мой вопрос заключается в том, было бы неуместным использовать словарь информации о пользователях для этой цели? И есть ли другие варианты, которые мне не хватает?

Ответ 1

Вариант 2 - это то, что я использую каждый раз. Если вы посмотрите на свою основную модель данных (something.xcdatamodeld или something.xcdatamodel), вы увидите что-то вроде изображения ниже.

core data entity in XCode

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

Кроме того, это также дает возможность добавлять автоматизацию. Вы можете сделать это, создав пользовательские геттеры и сеттеры (методы доступа) и пользовательский метод description.

Ответ 2

Я использую опцию 2 и категории. Я позволю XCode сгенерировать подклассы NSManagedObject и использовать категорию для каждого из этих подклассов. В категориях я не теряю свои изменения, внесенные в категории, могу документировать, создавать пользовательские getter и seters, и я все еще могу использовать сгенерированные подклассы.

Ответ 3

Если мы говорим только о документировании (т.е. написании более или менее большого количества текста, предназначенного для чтения людьми) ваших классов, я бы использовал вариант 2.

Если вы беспокоитесь о возможности перезаписывания классов в коде 2, вы можете создать два класса для каждого объекта: один, который генерируется Xcode и всегда может быть заменен (вы вообще не трогаете этот файл) и другой, который наследует от сгенерированного и в который вы помещаете все свои настройки и комментарии.

Этот двухклассовый подход предлагается mogenerator.

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