2011-01-06 4 views
5

Ich frage mich, ob ich hier im Namen von RAD zu viel abstrahiere.Gibt es etwas, das "zu abstrakt" ist?

Ein Beispiel hier - sagen wir, ich habe eine Datenbanktabelle, die 3 Modelle hat (das Hauptmodell, das Mapper-Modell und das Datenbankmodell). Jede davon erweitert ein abstraktes Modell, ein Mapper- und ein DB-Tabellenmodell.

Diese Einrichtung funktioniert sehr gut. Der Großteil der Operationen befindet sich tatsächlich in den abstrakten Modellen. Aber jetzt möchte ich noch mehr abstrahieren. Gehe ich zu weit?

Ich habe bereits grundlegende CRUD-Operationen abstrahiert, jetzt denke ich darüber nach, die fortgeschritteneren zu abstrahieren.

Ein Beispiel dafür wäre, ein paar verwandte Modelle zu holen. Zur Zeit würde ich folgendes tun:

$ modelOne-> modelTwo(); wo ModelTwo explizit definiert ist.

Meine Idee war dann entweder eine abstrakte Methode wie injectModel ('modelTwo') oder eine magische Methode zu verwenden.

Ich kann immer die relevanten Regeln einbauen, um sicherzustellen, dass meine Modelle die Integrität behalten ... aber ist das zu weit?

Alle Hinweise zu schätzen wissen.

Es ist mir egal, wie inkohärent etwas von meinem Code ist; Ich kann in diesen Teilen klare Dokumentationen und Kommentare schreiben.

+2

Um zu paraphrasieren, "jedes Problem in der Informatik kann mit einer anderen Ebene der Abstraktion gelöst werden". Nein, es gibt kein "zu abstraktes". ;) – FrustratedWithFormsDesigner

+2

Heh. Natürlich gibt es - in dem Moment, in dem die Abstraktion nicht verwendbar oder nützlich ist und nur dazu dient, die Bedeutung zu blockieren, sind Sie "zu abstrakt" geworden. – Oded

+0

Ich bin mir nicht sicher, ob Sie es richtig verstehen, aber Sie könnten nach Beziehungen zwischen Modellen suchen, werfen Sie einen Blick auf Doktrin-Beziehungen als Beispiel: http: //www.doctrine-project.org/documentation/manual/1_0/de/defining-models # relationships – tawfekov

Antwort

2

Das ist genau der Ansatz, den ich bei der Entwicklung meiner aktuellen Anwendung gewählt habe. Und jetzt habe ich eine ganze Reihe von abstrakten Methoden und magischen Methoden, um die Beziehungen eines Models auf der Oberseite von Zend_Db_Table und Zend_Db_Table_Row zu finden.

Obwohl es sich am Anfang recht gut anfühlte, wird es immer komplizierter, sogar neue abstrakte Methoden zu unterstützen und einzuführen, ganz zu schweigen von den Härten, mit denen andere Mitglieder des Teams konfrontiert sind (egal wie gut sie dokumentiert sind) ist).

Dieser Ansatz fühlt sich so an, als würde ich mein eigenes ORM schreiben, was ich definitiv nicht geplant habe. Mein stärkster Glaube ist jetzt, dass ich Lehre von Anfang an übernommen haben sollte.

+0

Das ist das Gefühl, das ich habe. Zum Glück habe ich nur ein paar Anwendungen mit meiner aktuellen Methode entwickelt. Ich werde Doctrine in Zukunft definitiv in mein Projektskelett integrieren. Danke für die Antwort! –

1

Hat Einstein nicht gesagt: "Alles sollte so einfach wie möglich gemacht werden, aber nicht ein bisschen einfacher."?

Wie mein einfacher Verstand interpretiert das ist nur abstrakt, so weit wie Sie brauchen. Wenn Sie populäre Frameworks vergleichen, welche sind Ihrer Meinung nach zu abstrakt, um Ihre Aufmerksamkeit von dem abzulenken, was Sie tun? Ich würde argumentieren, ASP.NET und Java tendieren dazu, dies viel mehr zu tun als PHP oder node.js. Auch wenn Sie XML mit JSON vergleichen, ist dies wahrscheinlich deutlicher, dass zu viel Abstraktion zu einer höheren Nutzlast und einem höheren intellektuellen Gewicht führt. Ich sehe keinen Wert darin, ein Gelehrter der Abstraktion zu sein.

KISS