核心数据模型设计或架构

时间:2015-11-23 06:38:34

标签: ios swift core-data

我计划使用Core Data来存储我的应用数据。但是,当我尝试设计模型实体的体系结构时,我发现最核心的数据教程混合了"获取数据","插入数据","删除数据& #34;使用ViewControllers。根据信息系统设计原则,是否将此类操作放在模型的实现中? 例如,有一个基础ModelClass:

class BaseModel {
 var modelName: String!

// insert
 func insertNewObjectToModel(managedContext:NSManagedObjectContext)->BaseModel {

   return NSEntityDescription.insertNewObjectForEntityForName(modelName, inManagedObjectContext: managedContext) as! BaseModel
 }


// get 
 func fetchObject(predicate: NSPredicate)...


// delete
 func deleteObject(object:BaseModel)...

}

然后我有一个模特"学生"继承自BaseModel类,因此它继承了插入,查询,删除等方法。然后在ViewController类中,如果用户想要添加新对象,只需调用student.insertNewObject(context)。  我真的很困惑这种设计或封装是否有效。我已经阅读了Ray的“教程核心数据”,还阅读了Apple的核心数据示例。但似乎他们都在ViewController中放置了与模型相关的操作。 例如,我从Ray的书中选择了几行代码:

  func populateDealsCountLabel() {
        // 1
        let fetchRequest = NSFetchRequest(entityName: "Venue")
        fetchRequest.resultType = .DictionaryResultType

        // 2
        let sumExpressionDesc = NSExpressionDescription()
        sumExpressionDesc.name = "sumDeals"

        // 3
        sumExpressionDesc.expression = NSExpression(forFunction: "sum:", arguments: [NSExpression(forKeyPath: "specialCount")])

        sumExpressionDesc.expressionResultType = .Integer32AttributeType

        // 4
        fetchRequest.propertiesToFetch = [sumExpressionDesc]

        // 5 
        do {
            let results = try coreDataStack.context.executeFetchRequest(fetchRequest) as! [NSDictionary]

            let resultDict = results.first!
            let numDeals = resultDict["sumDeals"]
            numDealsLabel.text = "\(numDeals!) total deals"
        } catch let error as NSError {
            print("Could not fetch \(error), \(error.userInfo)")
        }
    }

英语不是我的舌头语言,所以我不确定你是否看到问题理解我的描述想要表达的内容。但我希望你的意见和答案!提前谢谢!

0 个答案:

没有答案