2016-10-24 31 views

回答

-1

不,區域使用代理方法分配對象字段。您應該考慮使用數據訪問對象 - 數據庫周圍的抽象接口。創建數據模型,將由您的應用程序和另一個模型(可能具有相同的字段)使用,僅由Realm使用。 這將是更多的代碼,但通過這樣做,你將獨立於數據庫實現。 您的模型對象應該由Builder創建,然後由某個數據庫接口接受。在實現這個接口時,你將把這個對象轉換成Realm對象。

+0

是的,Realm使用代理方法分配對象字段,但所有字段訪問均使用Realm-Transformer轉換爲代理方法調用。 – EpicPandaForce

0

Eliminate @Boilerplate類似,您可以爲您的RealmObjects創建構建器(請注意AutoValue支持不在,因爲不支持抽象類)。

public class User extends RealmObject { 
    @PrimaryKey 
    String username; 

    String firstname; 

    String lastname; 

    int age; 

    public String getUsername() { 
     return username; 
    } 

    public String getFirstname() { 
     return firstname; 
    } 

    public String getLastname() { 
     return lastname; 
    } 

    public int getAge() { 
     return age; 
    } 
} 

您可以創建一個生成器是這樣的:

public final class UserBuilder { 
    private String username; 
    private String firstName; 
    private String lastName; 
    private int age; 

    public UserBuilder() { 
    } 

    public UserBuilder username(String username) { 
     this.username = username; 
     return this; 
    } 

    public UserBuilder firstName(String firstName) { 
     this.firstName = firstName; 
     return this; 
    } 

    public UserBuilder lastName(String lastName) { 
     this.lastName = lastName; 
     return this; 
    } 

    public UserBuilder age(int age) { 
     this.age = age; 
     return this; 
    } 

    public User build() { 
     User user = new User(); 
     user.username = this.username; 
     user.firstName = this.firstName; 
     user.lastName = this.lastName; 
     user.age = this.age; 
     return user; 
    } 
} 

這是可能的,因爲0.88.0及以上,因爲境界變壓器變爲代理方法調用的所有字段訪問。

但是,這種設置,我不知道你會如何可靠地修改管理RealmObject,因爲保存的關係,它使用相同的管理對象是非常重要的(使用findFirst()然後制定者) - 考慮非託管對象被認爲是一個「新」對象,並使用相同的主鍵將它保存在以前的對象上,從而使對象鏈接無效。