Вы можете программно изменять объекты, но вы не можете изменить модель управляемого объекта после того, как она была назначена контексту управляемого объекта, что делает ее бесполезной для любых определенных пользователем изменений.В любом случае вы не захотите добавлять объекты программно, потому что это сделает ранее созданный файл постоянного хранилища бесполезным.
Если вы хотите создать более гибкую, расширяемую пользователем модель данных, вы должны отступить и сделать свои объекты более гибкими, добавив необязательные отношения к другому объекту или группе наследования объектов, которая может моделировать дополнительные данные.,
Например: предположим, у вас есть список контактов, и вы хотите добавить поля свободной формы для каждого контакта.Вы бы настроили свои объекты так.
Contact{
name:string
phone:string
userDefinedFields<-->>UserDefined.contact
}
UserDefined{
name:string
contact<<-->Contact.userDefinedFields
}
Каждый раз, когда пользователь добавляет новое поле, вы создаете новый объект UserDefined
и добавляете ему отношение Contact.userDefinedFeilds
.Вы можете конкретизировать это по мере необходимости.Если вам требуется более одного типа определенного пользователем поля, вы должны настроить его следующим образом:
Contact{
name:string
phone:string
userDefinedFields<-->>UserDefined.contact
}
UserDefined{
name:string
contact<<-->Contact.userDefinedFields
}
TextField:UserDefined{
text:string
}
NumberField:UserDefined{
numValue:Number
}
Затем вы можете вставить объект TextField или NumberField в Contact.userDefinedFields
по мере необходимости.