2017-05-19 3 views
1

Ich arbeite an einer Android-Anwendung, die Daten von einem Server verwendet. Ich habe ein Singleton-Anwendungsobjekt, das Daten enthält, die in der gesamten App verwendet werden (der Benutzer, seine Adressen usw.).Client/Server-Muster für lokale Objekte?

Bis jetzt habe ich diese Daten im laufenden Betrieb, dh. Wenn ich AddressesActivity öffne, rufe ich die Adressen webService auf, die Daten in Application auffüllen, bevor die Liste angezeigt wird.

Aber wie die App wächst und ich brauche die gleichen Daten an verschiedenen Orten, beginne ich Code zu kopieren, um die Daten zu füllen. Außerdem muss ich die ganze Zeit überprüfen (wenn app.addresses == null callAddressesWebService, etc.).

Ich habe einige Ideen, um dies schön zu gestalten, aber ich frage mich, ob es ein bekanntes Muster speziell für dieses spezielle Problem gab?

EDIT

Hier ist, was ich begann nicht nur die Einsicht zu tun,?

public abstract class LazyLoaded<T> { 
    private T localValue = null; 
    private boolean upToDate = false; 

    public void get(final SingleResultCallback<T> successCallback, final ErrorCallback errorCallback) { 
     if (getLocalValue() != null && isUpToDate()) { 
      successCallback.onResponse(getLocalValue()); 
     } 
     else { 
      update(
        new EmptyCallback() { 
         @Override 
         public void onResponse() { 
          get(successCallback, errorCallback); 
         } 
        }, 
        errorCallback 
      ); 
     } 
    } 

    protected abstract void update(EmptyCallback successCallback, ErrorCallback errorCallback); 

    protected T getLocalValue() { 
     return localValue; 
    } 

    protected void setLocalValue(T localValue) { 
     this.localValue = localValue; 
     this.upToDate = true; 
    } 

    protected boolean isUpToDate() { 
     return upToDate; 
    } 

    public void setObsolete() { 
     upToDate = false; 
    } 
} 

Antwort

0

Caching Muster ist die Antwort - siehe this

+0

Sie danke ich werde mal schauen :) –

Verwandte Themen