Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 核心数据模型设计或架构_Ios_Swift_Core Data - Fatal编程技术网

Ios 核心数据模型设计或架构

Ios 核心数据模型设计或架构,ios,swift,core-data,Ios,Swift,Core Data,我计划使用核心数据来存储我的应用程序数据。然而,当我试图设计模型实体的体系结构时,我发现大多数核心数据教程都将获取数据、插入数据、删除数据与ViewController混合在一起。这些操作不是按照信息系统设计原则放在模型的实现中吗?? 例如,有一个基本模型类: class BaseModel { var modelName: String! // insert func insertNewObjectToModel(managedContext:NSManagedObjectContext

我计划使用核心数据来存储我的应用程序数据。然而,当我试图设计模型实体的体系结构时,我发现大多数核心数据教程都将获取数据、插入数据、删除数据与ViewController混合在一起。这些操作不是按照信息系统设计原则放在模型的实现中吗?? 例如,有一个基本模型类:

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)...

}
然后我有一个模型Student继承自BaseModel类,因此它继承了插入、查询、删除等方法。然后在ViewController类中,如果用户想要添加新对象,只需调用student.insertNewObjectcontext。 我真的很困惑这样的设计或封装是否有效。我读过Ray的《核心数据教程》,也读过苹果的核心数据示例。但他们似乎都将模型相关的操作放在了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)")
        }
    }

英语不是我的母语,所以我不确定你是否明白我的描述想要表达什么。但我希望你的评论和回答!提前谢谢

当我使用核心数据时,我将逻辑代码放在扩展中。我使用这个库来减少一些工作。教程很少涉及任何意义上的最佳实践。他们试图教授特定的概念、技术或API。当编写真实代码时,总是遵循你认为是好的实践和设计的任何东西。在教学特色的同时,更多地提升质量。我同意“AVI”,从架构/正确性/知识分配的角度来看,大多数教程和苹果样例代码都是一团糟。@利奥,谢谢您的建议,稍后我会考虑使用MigalRead。但现在我想知道,如果我自己实现核心数据模型,最好的架构是什么?@Avi,我理解你的意思,谢谢。然而,你能给我一些关于建筑的建议吗。根据实体继承,我认为良好的体系结构会影响我的应用程序的性能。╯□╰o