dedlfix: Frage bzgl. OOP und einem Klassen Diagramm

Beitrag lesen

Tach!

Das sollte ein UML Klassendiagramm sein, eine grobe Übersicht für mich, aber muss mich nochmal damit befassen, um korrekte, logisch nachvollziehbare Diagramme zu erstellen.

Erstmal geht es darum, eine Struktur in dein Projekt zu bringen. Bevor du über Klassen und Diagramme dazu nachdenkst, steht erstmal an, die Zuständigkeiten zu klären. Als Beispiel: Eine Kuh melkt sich nicht selbst. Das macht der Bauer oder eine Melkmaschine. Die Milch ist auch nicht diejenige, die Butter und Käse aus sich macht. Auch die Kuh macht das nicht, sondern andere Spezialisten sind für diese Weiterverarbeitung zuständig.

Die Spreadsheet-Daten sollten lediglich die Daten selbst sein. Beschaffen ist eine Geschichte, Weiterverarbeiten eine andere. Die Datenbeschaffung muss Dinge mit dem System regeln, über das sie die Daten holt. Zum Beispiel einen Querystring zusammensetzen oder den Body für einen POST-Request, die Response entgegennehmen und gegebenenfalls aus einem JSON-String ein Objekt wiederherstellen. Auch das Reagieren auf Fehlerfälle gehört dazu. Das wird allein schon umfangreich genug, dass man dazu nicht auch noch tausend andere Aufgaben in die Klasse packen sollte, auch wenn sich nach außen hin alles hinter einer einzelnen Methode versteckt und damit auf den ersten Blick klein genug aussieht.

Filtern und suchen (wo ist da der Unterschied?) und andere Dinge, die die Daten weiterverarbeiten, sind besser in einem eigenen Service abseits der Beschaffung aufgehoben. Ob diese Aufgaben jeweils einen eigenen Service bekommen sollten oder alle in einem gut aufgehoben sind, ist Ansichtssache. Das hängt vor allem davon ab, wie umfangreich die jeweiligen Aufgaben sind. Refakturieren kann man später immer noch.

Von getData() ist alles abhängig. getData() soll direkt mit Aufruf der Klasse ausgeführt werden (im Constructor). Hier wird geprüft, ob es sich um eine Google Spreadsheet URL handelt, die die Spreadsheet Daten als JSON zurückgibt.

Lieber nicht. Man könnte zwar das Promise im Konstruktor erstellen, aber Promises laufen sofort los, wenn man sie erstellt, nicht erst, wenn jemand kommt und sich für das Ergebnis interessiert. Im Zweifelsfall wird also das System gleich beim Startvorgang mit zu dem Zeitpunkt unnötigen Dingen beauftragt. Das Promise würde ich erst dann erstellen, wenn der erste Verwender es haben möchte.

dedlfix.