Code Organisation AngularJS großer Controller

7

Ich habe einen riesigen Controller, den ich in Subcontroller aufgeteilt habe, die ich entsprechend ihrer Funktionalität in andere Dateien lege.

Alles funktioniert gut, aber ich brauche einen Rat und die Antwort auf meine Frage: habe ich es richtig gemacht?

Hier ist ein riesiger Controller:

%Vor%

Hier ist der Code meines Subcontrollers in einer anderen Datei, die ich nach dem Frontcontroller lade:

%Vor%

Ist es in Ordnung, Funktionen als Parameter zu senden? Ist es in Ordnung, wenn ich nichts von Subcontrollern zurückgebe, weil $ Scope alles beobachtet? Ist es in Ordnung, wenn ich einige Funktionen des Contollers in einem anderen verwende?

Jetzt sehe ich, dass nicht gut und nicht richtig ist, aber ich muss das Haupt-Contoller teilen, weil mehr als 10 k Zeilen Code darin sind.

Danke für Ihren Rat und Ihre Hilfe !!!

    
user3917453 07.02.2015, 21:57
quelle

2 Antworten

16

Ein Controller mit 10.000 Zeilen Code schreit , dass Sie das Prinzip der einfachen Verantwortlichkeit brechen mehrmals in Ihrem Code.

Anstatt "Unter-Controller" zu erstellen, sollten Sie zuerst Ihren Code umgestalten und wiederverwendbare Codesegmente in Services verschieben. Suchen Sie dann in Ihrer Benutzerschnittstelle nach allgemeinen Komponenten, die Sie in Richtlinien konvertieren können, und verschieben Sie Logik in einen Controller für diese Anweisungen, wobei Sie isolate scopes verwenden. Sie werden feststellen, dass es viel einfacher ist, diese Elemente zu kontrollieren und zu testen, wenn sie für sich selbst verantwortlich sind.

Sehen Sie sich als Nächstes die Steuerung als Syntax an, mit der Sie Ihre Beziehungen unterbrechen können mit $scope . Die Verwendung von $scope ist ein Anti-Pattern , da es sehr schwierig ist zu identifizieren, wo Elemente direkt auf% co_de platziert wurden % stammen von, werden verwendet und werden geändert. Es ist sehr leicht zu finden, dass ein Objekt einen anderen Wert hat, als es beabsichtigt war, weil es anderswo geändert wurde. Aus der eckigen Dokumentation :

  

• Wenn Sie den Controller verwenden, wird deutlich, auf welchen Controller Sie in der Vorlage zugreifen, wenn mehrere Controller auf ein Element angewendet werden.

     

• Wenn Sie Ihre Controller als Klassen schreiben, haben Sie innerhalb des Controller-Codes einfacheren Zugriff auf die Eigenschaften und Methoden, die im Bereich angezeigt werden.

     

• Da in den Bindings immer ein $scope vorhanden ist, müssen Sie sich keine Gedanken über primitive morphologische Vererbung machen.

Unterm Strich werden Sie wahrscheinlich feststellen, dass Sie, wenn Sie Ihren Code umgestalten, anstatt ihn nur "aufzulösen", eine viel überschaubare, testbare und zuverlässige Lösung erhalten.

    
Claies 07.02.2015, 22:13
quelle
2

Ich würde vorschlagen, dass Sie angular.module () verwenden, während Sie Code schreiben. Ich werde Ihren Code in guten trennen & amp; Modularisierung.

Sie können einen Sub-Controller erstellen und ihn mit Hilfe von $controller dependency in Ihren Hauptcontroller einfügen.

%Vor%     
Pankaj Parkar 07.02.2015 22:06
quelle