cocoa – CoreData模型设计:过度使用NSFetchRequest是设计不佳模型的症状吗?

cocoa – CoreData模型设计:过度使用NSFetchRequest是设计不佳模型的症状吗?,第1张

概述可以使用NSFetchRequest或跟踪与图中其他对象的关系来检索Core Data对象.可以公平地说,在一个设计良好的模型中,它将包含足够的关系(和获取的属性),以便将NSFetchRequests的使用保持在最低限度吗? 反驳论证是在iOS中存在NSFetchedRequestController.据推测,如果Apple认为关系和获取的属性在现有的错误/缓存中提供了令人满意的性能,那么他们就 可以使用NSFetchRequest或跟踪与图中其他对象的关系来检索Core Data对象.可以公平地说,在一个设计良好的模型中,它将包含足够的关系(和获取的属性),以便将NSFetchRequests的使用保持在最低限度吗?

反驳论证是在iOS中存在NSFetchedRequestController.据推测,如果Apple认为关系和获取的属性在现有的错误/缓存中提供了令人满意的性能,那么他们就不会创建NSFetchedRequestController.

有些情况下使用NSFetchRequest是优越的,因为Core Data可以在sqlite中完成所有工作.一个例子是获取聚合值.

有什么想法吗?我已经看了Core Data Programming Guide.在“获取托管对象”和“核心数据性能”部分中有相关的建议,但没有强烈建议关于提取请求的关系,反之亦然.

解决方法 我会说关系和NSFetchRequest各有其优点和缺点.作为开发人员,您应该知道何时适合使用其中一个.例如,采用这个模型:

--------------  1           * ------------| Department |<------------->>| Employee |--------------                ------------| name       |                | name     |--------------                | age      |                              | salary   |                              ------------

如果要检索属于特定部门的所有员工,则应遵循“department.employees”关系.使用谓词’department == xxxx’为Employee实体创建NSFetchRequest是不合适的.

相反,如果您想查找具有薪水>的特定部门的员工. x然后使用带有谓词的NSFetchRequest是合适的,例如’department == xxxxx AND salary> X’.使用department.employees关系检索所有员工是不合适的,然后在循环中迭代它们以找到高收入者.

总之,关系或NSFetchRequests本质上不是“好”或“坏”.只需适当使用它们.使用关系导航对象图.使用NSFetchRequest执行子集搜索,或者您需要灵活地将结果作为字典返回或需要使用NSExpressions.

编辑添加:

你的代码遍布很多NSFetchRequests,这是设计糟糕的表现.我总是将数据请求封装在自定义NSManagedobject类中,并尝试不在视图/视图控制器代码中进行任何Core Data调用.

我想,提取属性是实现同样目标的一种方式.我更喜欢在代码中创建NSFetchRequest而不是使用Core Data编辑器来完成它.它更加灵活,但两种方式实际上都是相同的.

总结

以上是内存溢出为你收集整理的cocoa – CoreData模型设计过度使用NSFetchRequest是设计不佳模型的症状吗?全部内容,希望文章能够帮你解决cocoa – CoreData模型设计:过度使用NSFetchRequest是设计不佳模型的症状吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1010073.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存