比较领域对象

Posted

技术标签:

【中文标题】比较领域对象【英文标题】:Compare realm objects 【发布时间】:2016-02-12 09:22:53 【问题描述】:

在下面,ddictionary 指的是同一个领域对象,但 ==isEqual: 都导致 NO。比较没有主键的领域对象的最佳方法是什么?

(lldb) po d
UserDictionary 
    dateImported = 2016-02-12 03:44:53 +0000;
    dirtyProperties = RLMArray <0x7f01a110> (

    );
    var1 = ingles;
    var2 = ;
    var3 = ;
    name = bab.la (popup);
    url = http://en.bab.la/dictionary/%(var1)s-english/%(term)s;
    toLanguage = es;
    fromLanguage = en;


(lldb) po dictionary
UserDictionary 
    dateImported = 2016-02-12 03:44:53 +0000;
    dirtyProperties = RLMArray <0x7a1b4d30> (

    );
    var1 = ingles;
    var2 = ;
    var3 = ;
    name = bab.la (popup);
    url = http://en.bab.la/dictionary/%(var1)s-english/%(term)s;
    toLanguage = es;
    fromLanguage = en;

这必须在某个地方完成,因为我可以在 RLMResults 中使用 indexOfObject 作为解决方法。

【问题讨论】:

【参考方案1】:

isEqualToObject: 检查两个对象实例是否引用同一个底层持久化对象。

【讨论】:

【参考方案2】:

默认的isEqual: 实现只是比较内存地址,就像== 一样。

您必须自己实现-isEqualToUserDictionary:(UserDictionary*)。 你也可以实现-isEqual:(id) 方法,但是你应该 首先在方法中检查对象的类型。

您不应该比较对象的主键,而是比较它的所有字段。

实现-hash 是使您的对象具有可比性的好方法。

【讨论】:

以上是关于比较领域对象的主要内容,如果未能解决你的问题,请参考以下文章

结构化与面向对象方法的比较

DDD领域驱动设计之面向对象思想

PHP面向对象之领域模型+数据映射器

SwiftUI 中的领域:UI 中仅偶尔保存对象的实时文本

视图的对象化描述

如何运用领域驱动设计 - 实体