Dies ist eher eine Design-Muster Frage als realm
, ich versuche, zwei verschiedene Arten von Objekten in Realm hinzuzufügen.Common Code-Praxis zur Durchführung von Datenbankoperationen in Realm
complaint
dealer
Ich habe eine zwei separate Funktion erstellt, um diese zwei Objekte hinzuzufügen. Mein Problem ist, dass ich keinen separaten Code für das Einfügen von Daten in den Realm für jedes Objekt schreiben möchte. Ich möchte verallgemeinern, indem ich eine gemeinsame Klasse definiere und dann diese Klasse erweitere.
hier ist mein aktueller Code
für Händler
public void insertDealersData (endgültige Händler Händler) {
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();
}
});
}
zur Beanstandung public void insertComplaintData (endgültige Beschwerde Beschwerde) {
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();
}
});
}
Wie Sie sehen können, gibt es keine Änderung in einem Code außer dem Objekttyp. also kann jemand vorschlagen, wie ich einen Code verallgemeinern kann, indem er die Redundanz verringert.
Beschwerde Modell
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;
}
Händler Modell
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;
}
Der Fluss sieht ähnlich aus, aber sie verschiedene Methoden aufrufen: 'getDealersList()' 'vs. getComplaintsList() ', so ist es mehr als nur der" Objekttyp ". Wenn Sie nur zwei verschiedene Typen haben, würde ich wahrscheinlich mit der Code-Duplizierung leben, da jeder Versuch, ihn zu verallgemeinern, den Code länger und unlesbarer machen würde. –
Wenn Sie die Modellklasse für "Beschwerde" und "Dealer" teilen, werde ich diese Frage beantworten – EpicPandaForce
@EpicPandaForce Ich habe meine Frage mit den Modellen – Hunt