Sind SharedPreferences das Model in einer MVC Architektur?
Hey,
ich schreibe eine kleine App (Android Studio) und möchte mich dabei an MVC halten.
Bisher habe ich Activities mit jeweils einem XML-File (die View) und einer eigenen Java Klasse (der Controller).
Meine Daten habe ich bisher in einer eigenen Java Klasse (keine Activity!) gespeichert.
Wenn ich die Daten aber in SharedPreferences speichern möchte, muss ich den Code zum speichern und abrufen der Daten in die Controller Klasse schreiben.
Gilt dann in dem Fall die Datei "MeineSharedPreferences" die im Unterordner der App-Ordner-Struktur liegt als "Model" des Ganzen?
Im Grunde ja schon, da die Datei nur die Daten hält und sonst nichts macht.
Zugreifen tut man aber durch die SharedPrefs aus dem Controller.
Ich bin mir da sehr unsicher, ob ich da das MVC-Pattern verletze oder nicht.
1 Antwort
Ich habe noch nicht direkt mit dem MVC Pattern gearbeitet. Habe mich dazu damit im Bereich Android eingelesen.
Ich würde die Ansteuerung vom SharedPreferences in die Model Klasse packen bzw. dort die SharedPreferences Helfer Klasse aufrufen.
Mit SharedPreferences kann man Key Value Paare speichern, welche auch über ein App Start hinaus gespeichert werden. Es ist also eine Art von Datenspeicherung. Die Controller Klasse ist dafür da, Werte zu speichern und zu verwalten.
Ohne SharedPreferences würde man die Werte vom Model in Variablen ablegen. Mit SharedPreferences sind es dann eben versteckte Variablen, welche man über Getter und Setter Methoden bekommt.
Ein kleines Beispiel mit einem Button, der z.B. ein boolean Variable auf true setzt.
Der Button wird im View (XML Datei) mit einer ID definiert. In der Activity Klasse (Controller) hast du dann ein onClick Listener für den Button.
In der Model Klasse hast du dann eine set(Wert) bzw. setTrue() Funktion, welche den Code zum Beschreiben des SharedPreference Attribut enthält bzw. extern ausführt (z.B. Helfer Klasse). Diese set() Funktion wird vom Button onClickListener ausgeführt.
Der Controller bekommt dann über das Obserable mit, dass es eine Änderung gab, sodass der Controller die get() Funktion vom Model aufruft. In der Model get() Funktion ist der SharedPreferences Code enthalten bzw. wird abgerufen. Die abgerufene Änderung wird dann im View angezeigt.
Ich hätte die SharedPreferences noch in eine Helfer Klasse verschoben, dass du die Werte im Model durch einen einzelnen Abruf lesen und schreiben kannst. Die Helper Klasse könntest du in einen separaten Unterodner abspeichern.
Bin kein Experte bei MVC, aber so hätte ich es gemacht.