【发布时间】:2016-11-19 15:35:45
【问题描述】:
这更像是一个设计模式问题而不是 realm ,我正在尝试将两种不同类型的对象添加到领域中。
complaint
dealer
我创建了两个单独的函数来添加这两个对象。我的问题是我不想为每个对象编写单独的代码来将数据插入领域,我想通过定义一个通用类然后扩展该类来进行概括。
这是我当前的代码
经销商
public void insertDealersData(final Dealers 经销商){
final Realm realm = getExplicitRealm() ;
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
int newDealersSize = dealers.getDealersLists().size();
Dealers dbDealers= realm.where(Dealers.class).findFirst();
if(dbDealers!=null){
for(int i =0;i<newDealersSize;i++){
DealersList temp= realm.where(DealersList.class).equalTo("dealerid",
dealers.getDealersLists().get(i).getDealerid()).findFirst();
if(temp!=null){
dbDealers.getDealersLists().set(i,temp);
}else{
dbDealers.getDealersLists().add( dealers.getDealersLists().get(i));
}
}
}else{
realm.copyToRealmOrUpdate(dealers);
Log.i(TAG, "insertDealersData : dump");
}
}
},new Realm.Transaction.Callback(){
@Override
public void onSuccess() {
realm.close();
}
@Override
public void onError(Exception e ) {
realm.close();
}
});
}
投诉 public void insertComplaintData(最终投诉投诉){
final Realm realm = getExplicitRealm() ;
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
int newComplaintSize = complaint.getComplaintLists().size();
Complaint dbComplaint= realm.where(Complaint.class).findFirst();
if(dbComplaint!=null){
for(int i =0;i<newComplaintSize;i++){
ComplaintList temp= realm.where(ComplaintList.class).equalTo("incidentid",
complaint.getComplaintLists().get(i).getIncidentid()).findFirst();
if(temp!=null){
dbComplaint.getComplaintLists().set(i,temp);
Log.i(TAG, "insertComplaintData : update existing");
}else{
dbComplaint.getComplaintLists().add(complaint.getComplaintLists().get(i));
Log.i(TAG, "insertComplaintData : add new ");
}
}
}else{
realm.copyToRealmOrUpdate(complaint);
Log.i(TAG, "insertComplaintData : dump");
}
}
},new Realm.Transaction.Callback(){
@Override
public void onSuccess() {
realm.close();
}
@Override
public void onError(Exception e ) {
realm.close();
}
});
}
如您所见,除了对象类型外,代码没有任何变化。所以任何人都可以建议我如何通过减少冗余来概括代码。
投诉模式
public class Complaint extends RealmObject{
private String status;
private String errorMessage;
private String count;
@PrimaryKey
private String userId;
private String organizationId;
@JsonField(name ="complaints" , typeConverter = ComplaintListConverter.class)
private RealmList<ComplaintList> complaintLists;
}
@JsonObject
public class ComplaintList extends RealmObject implements ComplaintInterface {
@PrimaryKey
private String _id;
private String incidentid;
private String title;
private String casetypecode;
private String customerid;
}
经销商模式
public class Dealers extends RealmObject {
private String status;
private String errorMessage;
private String count;
@PrimaryKey
private String userId;
private String organizationId;
@JsonField(name="dealers", typeConverter = DealersListConverter.class)
private RealmList<DealersList> dealersLists;
}
public class DealersList extends RealmObject {
@PrimaryKey
private String _id;
private String dealerid;
private String accountnumber;
private String name;
private String alletec_type;
private String telephone1;
}
【问题讨论】:
-
流程看起来很相似,但您调用的方法不同:
getDealersList()与getComplaintsList(),因此它不仅仅是“对象类型”。如果你只有两种不同的类型,我可能会忍受代码重复,因为任何概括的尝试都会使代码更长+更不可读。 -
如果你分享
Complaint和Dealer的模型类,那么我会回答这个问题 -
@EpicPandaForce 我用模型更新了我的问题
-
@EpicPandaForce 你能提出任何其他我打算删除这个问题的建议吗,因为我喜欢问它没有相关性
-
啊,是的,对不起,我工作太忙了,然后我忘记了这个。等一下
标签: android design-patterns realm