Heim >Web-Frontend >js-Tutorial >Räumen Sie Ihre Winkelcontroller mit Fabriken und Diensten auf

Räumen Sie Ihre Winkelcontroller mit Fabriken und Diensten auf

Jennifer Aniston
Jennifer AnistonOriginal
2025-02-21 12:28:10446Durchsuche

Tidy Up Your Angular Controllers with Factories and Services

Vor ungefähr fünf oder sechs Jahren dominierte JQuery die Kunden des Webs. Es liest wie Pure English, ist einfach zu installieren und hat eine reibungslose Lernkurve, die selbst Kleinkinder leicht loslegen können. Diese Benutzerfreundlichkeit bringt jedoch auch eine Reihe von Problemen mit sich. JQuery macht es leicht, etwas zusammenzusetzen, das „nutzbar“ ist, aber es geht zu Lasten von Best Practices, Wartbarkeit und Skalierbarkeit. Dann beginnt der Framework -Krieg und bald krabbeln alle, um die neuesten und besten Frameworks auszuprobieren, die versprechen, Struktur und Skalierbarkeit in ihre Anwendungen zu bringen. AngularJS ist eines der Frameworks. Jetzt ist die Lernkurve von Angular viel steiler als die von JQuery, aber ich denke, sie hat sich so weit entwickelt, dass viele Entwickler grundlegende Anwendungen mit fairem Vertrauen einrichten können. Mit anderen Worten, die Verwendung von Frameworks kann die Kernprobleme des Anwendungsdesigns nicht automatisch lösen. Es ist weiterhin möglich, nicht zubereitete oder nicht skalierbare Anwendungen in Frameworks wie AngularJs, Emberjs oder React zu erstellen. Tatsächlich ist es für Anfänger und sogar Intermediate-Framework-Benutzer weit verbreitet, diesen Fehler zu machen.

Schlüsselpunkte

  • Verwenden Sie die Winkelfabrik, um die Erstellung und Konfiguration von Objekten zu verkapulieren und zu verwalten, wodurch der Fokus der Objekterstellung vom Controller getrennt wird, wodurch die Modularität und Wartbarkeit verbessert wird.
  • Implementieren Sie Dienste, um Datenabruf- und Geschäftslogik zu verarbeiten und den Angular Controller so zu optimieren, dass er sich nur auf die Sichtverwaltung konzentriert.
  • Verwenden Sie die controllerAs -Syntax, um die Bindung in Vorlagen zu vereinfachen und häufige Fallstricke im Zusammenhang mit der Verwendung von $scope zu vermeiden, wodurch die Lesbarkeit und Wartbarkeit Ihres Codes verbessert wird.
  • Refactor den Controller, indem Sie wiederverwendbare Logik in einen Dienst oder eine Fabrik verschieben, wodurch ein sauberer und fokussierter Controller aufrechterhalten wird, der hauptsächlich mit der Logik im Zusammenhang mit der Ansicht befasst.
  • Testcontroller, Dienste und Fabriken mit Frameworks wie Jasmine oder Mokka, um sicherzustellen, dass Komponenten unabhängig arbeiten und Anwendungen robust halten.
  • abstrakte sich wiederholende oder gemeinsam genutzte Funktionen in Dienste oder Fabriken, um Code -Duplikation zu vermeiden und die Aktualisierung und Verwaltung von Funktionen zu erleichtern, die in verschiedenen Teilen der Anwendung verwendet werden.

Wie ist es so einfach, außer Kontrolle zu geraten?

Um zu demonstrieren, wie diese plötzliche Komplexität selbst in der grundlegendsten AngularJS -Anwendung auftritt, beginnen wir mit dem Aufbau einer Anwendung und beobachten Sie, wo wir schief gehen könnten. Dann werden wir uns die Lösung später ansehen.

Erstellen wir eine einfache Anwendung

Die Anwendung, die wir erstellen werden, ist eine Bewertung von Dribbble Player. Wir können den Namen des Dribbble -Benutzers eingeben und sie in die Anzeigetafel hinzufügen. Spoiler - Hier können Sie die effektive Implementierung des Endprodukts sehen. Erstellen Sie zuerst eine Index.html -Datei mit folgenden Inhalten:

<code class="language-html"><!DOCTYPE html>

  
    <title>Angular 重构</title>
    <link href="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
    
  
  
    <div class="container">
      <div class="panel panel-default">
        <div class="panel-heading">Dribbble 玩家分数</div>
        <div class="panel-body">
          <p>添加 Dribbble 玩家以查看他们的排名:</p>
          <div class="form-inline">
            <input class="form-control" type="text">
            <button class="btn btn-default">添加</button>
          </div>
        </div>
        <ul class="list-group"></ul>
      </div>
    </div>
  
</code>

Erstellen Sie unsere AngularJS -Anwendung

Wenn Sie schon einmal eckige Anwendungen geschrieben haben, sollten die nächsten Schritte sehr vertraut sein. Zunächst erstellen wir eine App.js -Datei, in der wir unsere AngularJS -Anwendung instanziieren:

<code class="language-html"><!DOCTYPE html>

  
    <title>Angular 重构</title>
    <link href="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
    
  
  
    <div class="container">
      <div class="panel panel-default">
        <div class="panel-heading">Dribbble 玩家分数</div>
        <div class="panel-body">
          <p>添加 Dribbble 玩家以查看他们的排名:</p>
          <div class="form-inline">
            <input class="form-control" type="text">
            <button class="btn btn-default">添加</button>
          </div>
        </div>
        <ul class="list-group"></ul>
      </div>
    </div>
  
</code>

Jetzt geben wir es in unsere Index.html -Datei ein. Wir fügen auch das ng-app="dribbbleScorer" -Merkmal zu unserem Tag hinzu, um die Winkelanwendung zu starten.

<code class="language-javascript">var app = angular.module("dribbbleScorer", []);</code>

Nachdem unsere Anwendung eingerichtet und gebootet ist, können wir die Geschäftslogik der Anwendung verarbeiten.

(Der folgende Inhalt ähnelt dem Originaltext, aber die Sätze und der Vokabular werden angepasst, um die ursprüngliche Bedeutung unverändert zu halten, und einige wiederholte Schritte werden weggelassen, um die Ausgangslänge zu steuern.)

Durch schrittweise Hinzufügen von Funktionen (Formulare, Dribbble -Datenerfassung, Playerentfernung, Spielergebrauch, Spielerobjekte und Bewertungsberechnung). Der ursprüngliche Text zeigt, wie die Anwendung Schritt für Schritt "ausgeführt" wird, aber auch den Controller -Code verursacht auch aufgebläht und komplex werden.

Verwenden Sie die Drehfabrik, um unseren Fokus

abstrahieren zu lassen

Die beiden Konzepte zum Hinzufügen und Entfernen von Spielern sind etwas Teil des Controllers. Dies ist nicht so sehr, dass der Controller diese Funktionen enthüllt, sondern dass er auch für ihre Implementierung verantwortlich ist. Wäre es nicht besser, wenn die Funktion des Controllers die Anfrage nur an einen anderen Teil der Anwendung überreicht, um die Vor- und Nachteile des Hinzufügens des Spielers zu verarbeiten? Hier kommt die AngularJS -Fabrik ins Spiel. addPlayer()

(Die Fabrikerstellung und Verwendung des Originaltextes wurde neu geschrieben, was prägnanter und klarer ist und die Kernlogik behält)

Wir haben eine

Fabrik erstellt, die ein Konstruktor zum Erstellen von Dribbble -Player -Objekten ist. Diese Fabrik ist dafür verantwortlich, Daten von der Dribbble -API abzurufen und sie dem Player -Objekt hinzuzufügen. Durch die Verwendung dieser Fabrik haben wir den Controller so vereinfacht, dass er nur für das Hinzufügen und Entfernen von Spielern verantwortlich ist. DribbblePlayer

(Die Verbesserungen der Fabrikfunktionen im Originaltext, wie das Hinzufügen von und likeScore() Methoden, wurden ebenfalls umgeschrieben, um es prägnanter zu machen) commentScore()

Wir fügen auch die Score -Berechnungsmethode zur

-Fabrik als Methode des Spielersobjekts hinzu. Auf diese Weise ist der Controller -Code prägnanter und nur für die Logik im Zusammenhang mit der Ansicht verantwortlich. DribbblePlayer

Zusammenfassung

Dieser Artikel zeigt, wie man problemlos „nutzbarer“ Code schreibt und wie es schnell schwer zu warten ist. Wir haben einen chaotischen Controller voller Funktionen und Verantwortlichkeiten. Nach einigen Refactoring sieht unsere Controller -Datei jetzt jedoch so aus:

<code class="language-html">
  ...
</code>
Es ist einfacher zu lesen und konzentriert sich auf sehr wenige Dinge - darum geht es bei Refactoring. Ich hoffe, ich habe Ihnen die notwendigen Werkzeuge zur Verfügung gestellt, damit Sie über einen besseren Weg nachdenken können, um AngularJS -Anwendungen zu erstellen. Happy Refactoring! Der Code für dieses Tutorial ist auf GitHub verfügbar!

(Der FAQ -Teil am Ende des Originaltextes wird weggelassen, da der Artikel zu lang ist und eine schwache Beziehung zum Kerninhalt hat. Bei Bedarf können Sie eine separate FAQ -Frage stellen, um zu beantworten.)

Das obige ist der detaillierte Inhalt vonRäumen Sie Ihre Winkelcontroller mit Fabriken und Diensten auf. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn