我计划使用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)")
}
}
英语不是我的舌头语言,所以我不确定你是否看到问题理解我的描述想要表达的内容。但我希望你的意见和答案!提前谢谢!