Я работаю над приложением для отслеживания личных финансов.До сих пор я использовал классы Swift в качестве уровня абстракции, так как я не знал, что я хочу использовать в качестве постоянного хранилища.У меня есть такие объекты, как Budget, BudgetGroup, BudgetItem, Transaction и Allocation.
BudgetGroup, BudgetItem, Transaction и Allocation уникальны для конкретного экземпляра бюджета.Будет новый Бюджет, и, следовательно, новые BudgetGroups, BudgetItems, Транзакции и Распределения каждый месяц.
Я сейчас пытаюсь реализовать постоянное хранилище, используя Базовые Данные.Мои определенные сущности выглядят так:
Преобразование свойств происходит просто
func fromManagedObject() -> Transaction {
let transaction = Transaction(
identifier: identifier!,
budget: nil,
transactionType: TransactionType( rawValue: transactionType ?? "" ) ?? TransactionType.expense,
date: date!,
amount: Currency( significand: amount ),
summary: summary!,
memo: memo,
allocations: []
)
return transaction
}
Из-за круговой природы графикапроблема заключается в преобразовании отношений «ко-многим» из управляемого объекта.Использование чего-то простого, например:
let mappedAllocations = (allocations?.allObjects as! [AllocationMO]).map { $0.fromManagedObject( ) }
может закончиться рекурсивным циклом и в конечном итоге привести к сбою.
Не слишком ли сложна моя модель базовых данных?Т.е. он НЕ должен иметь круговые пути?
Я побеждаю лучшие возможности Core Data и тратить ресурсы, конвертируя NSManagedObjects в мой уровень абстракции?
Было бы лучше реализовать набор протоколовкоторым соответствуют Базовые объекты данных, что позволяет избежать необходимости преобразования из одной модели в другую?