Frage

Ich lese Programmierung Best Practices und es wird gesagt, dass, wenn eine Funktion schaffen wir sollten es nur einen einzigen spezifischen Aufgabe behelfen.

Ich habe Modellfunktionen, die Daten abruft und es Daten. Beispiel:

$ this-> Student-> StudentAssignments ();

Derzeit wird diese Funktion ruft der Schüler Zuweisungen sowie die Frage für jede Zuordnung und Daten über die Schüler. Ich benutze sie alle. Mein Dilemma ist, wenn ich versuche, getrennte Funktionen zu machen, dass die zugehörigen Daten (Schüler und Fragedaten) ruft es anstrengend, da ich mehr Anrufe an die DB zu erzeugen.

Was würde euch vorschlagen?

War es hilfreich?

Lösung

Etwas im Auge zu behalten, wenn diese Art von Refactoring zu tun ...

ich habe in der Regel eine Model-> getSomethingAndSomethingElse Funktionen in meinen Modellen. Diese Funktionen sind öffentlich und soll als Ersatz genannt werden für komplizierte Tun (oder überhaupt) finden Anrufe vom Controller.

Was werde ich in der Regel tut, ist dann eine kleine Sammlung von privaten Funktionen im Modell aufzubauen. In Ihrem Fall könnte habe ich etwas entlang der Linien von ...

Student-> getStudentAssigmentsWithQuestions

, dass dann einige private Funktionen d.h nennt.

Student-> getStudent die Studenten- nennen könnte> joinStudentAssignment was wiederum nennen könnte Assignment-> joinAssignmentQuestion etc.

Die Doppelstrich-Präfixe gestrichen wurden, da Abschlag wegen sie zu fett Dingen will. Wenn Sie php5 die Unterstrichen verwenden sind nicht wirklich wichtig sowieso so lange, wie Sie die „private“ oder „proteced“ Schlüsselwörter verwenden.

Grundsätzlich verwende ich die öffentliche Methode als Container für eine Gruppe von sehr spezifischer Erstellung von Abfragen oder Vereinigung Aufbau private Veranstaltungen in den Modellen. Dies ermöglicht es mir, eine api zu haben, die komplexen Daten zurückgegeben hat, aber ich baue die Abfrage oder die Ergebnismenge (abhängig von der Art der Daten, Beziehungen beteiligt oder Abfrage Komplexität) von kleinen Stücken - die idealerweise vorgesetzt und in mehr verwendet werden kann als eine öffentliche Funktion aufrufen.

Andere Tipps

Ich glaube, du bist wohlauf. Aber Sie sollten Ihre Funktion

denken Umbenennung
$this->Student->getStudentAssignmentsWithQuestions

oder was auch immer Sie denken, fit. Ich denke, man sollte versuchen, so wenige Anrufe auf die Datenbank wie möglich zu tun (ich nehme an, Sie Durchführung eines dort irgendwo beitreten), statt jeden Satz von Elementen durch spezifische Methoden abgerufen werden. Dies kann dazu führen, dass Sie mehr Methoden erhalten werden (und daher noch einige Tests schreiben), aber ich denke, das ist der richtige Weg, es zu tun.

das Design-Argument zu verteidigen: Ihre Methode hat nur eine einzige Aufgabe; es holt Zuweisungen des Schülers mit dem jeweils Fragen der Zuordnung.

Nein, wenn Sie streng besorgt über Code Refactoring Sie, dass Blob in einfachere Funktionen brechen sollte, die eine einzige Aufgabe durchführen, wie Sie gesagt haben. Ja, werden Sie mehr Ihre Datenbank treffen aber wenn man bedenkt, wie einfach mit Caching in CakePHP zu arbeiten ist, Leistung sollte kein Problem sein. Und wenn ja, dann sollten Sie an dieser Stelle nicht über Code Refactoring kümmern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top