
キーポイント
Angular Factoryを使用して、オブジェクトの作成と構(gòu)成をカプセル化および管理し、オブジェクトの作成の焦點(diǎn)をコントローラーから分離し、それによりモジュール性と保守性を向上させます。 -
データの取得とビジネスロジックを処理するためのサービスを?qū)g裝し、角度管理者のみに焦點(diǎn)を當(dāng)てるように角度コントローラーを合理化します。 -
- 構(gòu)文を使用して、テンプレートのバインディングを簡素化し、
controllerAs
の使用に関連する一般的な落とし穴を避け、それによりコードの読みやすさと保守性を向上させます。 $scope
再利用可能なロジックをサービスまたは工場に移動(dòng)することにより、コントローラーをリファクタリングします。これは、主にビュー関連のロジックを扱うクリーンで集中したコントローラーを維持するのに役立ちます。
ジャスミンやモカなどのフレームワークを使用して、コンポーネントを獨(dú)立して動(dòng)作させ、アプリケーションを堅(jiān)牢に保つことができるように、- テストコントローラー、サービス、および工場を使用します。
- コードの複製を回避し、アプリケーションのさまざまな部分で使用される機(jī)能の更新と管理を促進(jìn)するために、サービスまたは工場への抽象的または共有された機(jī)能。
-
制御不能になるのはどうしてそんなに簡単ですか?
最も基本的なAngularJSアプリケーションでさえこの突然の複雑さがどのように発生するかを示すために、アプリケーションの構(gòu)築を開始し、どこで間違っているのかを観察しましょう。次に、後で解決策を見ます。
簡単なアプリケーションを作成してみましょう
作成するアプリケーションは、Dribbble Playerスコアリングアプリケーションです。 Dribbbleユーザーの名前を入力して、スコアボードに追加することができます。ネタバレ - ここで最終製品の効果的な実裝を見ることができます。最初に、次のコンテンツを含むindex.htmlファイルを作成します。
AngularJSアプリケーションを作成
<!DOCTYPE html>
<html>
<head>
<title>Angular 重構(gòu)</title>
<link href="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
<??>
</head>
<body>
<div class="container">
<div class="panel panel-default">
<div class="panel-heading">Dribbble 玩家分?jǐn)?shù)</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>
</body>
</html>
以前に角度アプリケーションを書いたことがある場合、次のいくつかのステップは非常によく知られているはずです。まず、AngularJSアプリケーションをインスタンス化するapp.jsファイルを作成します。
<!DOCTYPE html>
<html>
<head>
<title>Angular 重構(gòu)</title>
<link href="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
<??>
</head>
<body>
<div class="container">
<div class="panel panel-default">
<div class="panel-heading">Dribbble 玩家分?jǐn)?shù)</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>
</body>
</html>
次に、index.htmlファイルに含めます。また、Angularアプリケーションをブートストラップするために、
屬性をng-app="dribbbleScorer"
タグに追加します。 <html>
var app = angular.module("dribbbleScorer", []);
アプリケーションが設(shè)定され、起動(dòng)されたので、アプリケーションのビジネスロジックの処理を開始できます。
(次のコンテンツは元のテキストに似ていますが、文と語彙は、元の意味を変えないように調(diào)整されており、出力の長さを制御するためにいくつかの繰り返しの手順が省略されています。)
関數(shù)(フォーム、ドリブルデータ収集、プレーヤーの削除、プレーヤーの使用、プレーヤーオブジェクト、スコア計(jì)算)を徐々に追加することにより、元のテキストはアプリケーションを段階的に「実行」する方法を示していますが、コントローラーコードも発生します。肥大化して複雑になる。
Angular Factoryを使用して、焦點(diǎn)を抽象化します
プレーヤーを追加および削除するという2つの概念は、コントローラーの一部です。これは、コントローラーがこれらの機(jī)能を公開するほどではなく、むしろその実裝にも責(zé)任があるということです。コントローラーの関數(shù)が、実際にプレーヤーを追加するインとアウトを処理するためにアプリケーションの別の部分にリクエストを渡した場合、それは良いことではないでしょうか?これは、Angularjsの工場が出てくる場所です。
addPlayer()
(元のテキストの工場作成と使用部分が書き直されています。これはより簡潔で明確で、コアロジックを保持しています)
ファクトリーを作成しました。これは、ドリブルプレーヤーオブジェクトを作成するためのコンストラクターです。この工場は、Dribbble APIからデータを取得し、プレーヤーオブジェクトに追加する責(zé)任があります。この工場を使用することにより、プレーヤーの追加と削除のみを擔(dān)當(dāng)するように、コントローラーを簡素化しました。
(
およびDribbblePlayer
メソッドを追加するなど、元のテキストの工場関數(shù)の改善も同様に書き直されて、より簡潔にするために)
また、プレーヤーオブジェクトの方法としてスコア計(jì)算方法をファクトリに追加します。このように、コントローラーコードはより簡潔であり、ビューに関連するロジックのみを擔(dān)當(dāng)します。 likeScore()
commentScore()
概要
DribbblePlayer
この記事では、「使いやすい」コードを簡単に記述する方法と、維持が迅速に困難になる方法を示しています。機(jī)能と責(zé)任に満ちた混oticとしたコントローラーになります。ただし、リファクタリングの後、コントローラーファイルは次のようになりました。
読みやすく、非常に少數(shù)のことに焦點(diǎn)を當(dāng)てるのは簡単です - それがリファクタリングの目的です。 AngularJSアプリケーションを構(gòu)築するためのより良い方法について考え始めるために必要なツールを提供していただければ幸いです。幸せなリファクタリング!このチュートリアルのコードはGitHubで入手できます! (元のテキストの最後にあるFAQパーツは、記事が長すぎてコアコンテンツと弱い関係を持っているため、省略されています。必要に応じて、別のFAQ質(zhì)問に答えることができます。)
以上が角度コントローラーを工場とサービスで整理しますの詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。