Frage

Soweit Best Practices gehen wird dies empfohlen? Ich habe einen Kommentar Controller + Modell, das in einem Artikel und Profile Controller aufgerufen werden muss. Die Kommentare Controller lädt automatisch die Kommentare Modell.

Ist es akzeptabel, die Kommentare Controller direkt aus dem Artikel und Profil-Controller zu nennen, oder ist die „best practice“ Art und Weise, anstatt die Kommentare Modell zu nennen?

Ich frage, weil in kohana, die Sicht nicht eine Singleton-Klasse ist so, wenn ich einen Controller in einem anderen Controller nennen ich mit zwei Ansichten enden. Auf der anderen Seite, wenn ich das Modell nur war zu nennen, gäbe es doppelten Code innerhalb der Elemente und Profile-Controller.

Alle Sie MVC-Experten helfen! =)

War es hilfreich?

Lösung

Im Allgemeinen würde ich gehen für das „Fat Modell“ -Ansatz.

Ich bin nicht sicher, welcher Code Sie wirklich sind besorgt über das Duplizieren.

Es gibt ein paar Möglichkeiten, wie Sie dies tun könnte:

Erste Möglichkeit: Fragen Sie Ihre Kommentare Modell einige Kommentare zurückzukehren -. Führen Sie die Kommentardaten in Ihre Ansicht -. - die Kommentare in der Ansicht Render, möglicherweise einige View Helfer mit

Zweiter Weg: - Erkennen, dass es kein Grund, Ihre Ansicht kann nicht direkt mit Ihrem Modell sprechen. -. Einen View Helfer schreiben, die die Daten packt es direkt aus dem Modell braucht, und macht es

Ich ziehe den zweiten Weg. Einige Leute haben ein Problem im Stich gelassen ihre Sicht Schicht Rede zum Modell (in einer Read-Only-Mode!), Aber ich bin nicht einer von ihnen.

Andere Tipps

Wenn Sie Kohana 3 verwenden, können Sie von der HMVC Funktion profitieren. Sie können Controller innerhalb von Steuerungen ausgeführt werden.

http://forum.kohanaphp.com/comments.php?DiscussionID=2768

Überprüfen

den Link oben für einige Beispiele

Ich würde sagen, dass es auf das, was der Controller kehrt abhängig ist.

Wenn Ihr Controller zurückgeben kann DTOs / Modelle, dann sicher, einen Controller Aufruf ist eine gute Idee.

Ihr Controller definiert ein strengen, dokumentiert und hoffentlich stabile Einstiegspunkte zu Ihrer Funktionalität. Daher können Sie komplett die Implementierung Kommentare ignorieren oder ihn nach Belieben ändern, solange Sie die Signatur der Controllers Methode ändern, nicht.

Wenn jedoch der Controller nicht in der Lage ist Rohdaten zurückkehren, dann ist es auf jeden Fall prolematic, weil Sie HTML (oder andere Markup) im Gegenzug fühlt. Das bedeutet, dass Sie mit dem Rohr haben werden, die direkt in die Ansicht HTML Sie wollen, oder die Daten daraus extrahieren. Beide von denen eine schlechte Idee ist.

die rohen html Piping impliziert, dass, wenn Sie die Ansicht für Kommentare ändern, wird unweigerlich die Anzeige von Kommentaren auf dem Profil-Modul ändern. Dies könnte sein, was Sie wollen, aber ich würde für Flexibilität gehen.

Wenn Sie nun Daten wollen, werden Sie die Daten aus dem Markup zu extrahieren, um Ihre Ansicht zurück, das schwer und kontraproduktiv ist.

Wenn Sie versuchen, eine statische Methode aufrufen, können Sie einfach direkt die Funktion aufrufen. Zum Beispiel:

class Controller_User extends Controller {
    public static function format_user($user){
        return array("data" => $user->getData());
    }
}

class Controller_Foo extends Controller {
    public function action_index(){
        $user = get_user_data_some_how();
        $user_data = Controller_User::format_user($user)
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top