11# サービス
22
3- ツアー・オブ・ヒーローズ の中で扱っている ` HeroesComponent ` は、今のところ仮のデータを取得して表示している状態です。
3+ Tour of Heroes の中で扱っている ` HeroesComponent ` は、今のところ仮のデータを取得して表示している状態です。
44
5- この章では 、` HeroesComponent ` から無駄を省き、ビュー関連の処理に専念できるよう修正を行います 。
5+ このチュートリアルのリファクタリング後には 、` HeroesComponent ` は小さくなりビューをサポートすることに専念します 。
66これはモックサービスを使用して、ユニットテストをより簡潔にすることにもつながります。
77
88## なぜサービスが必要なのか?
1212コンポーネントはデータの受け渡しに集中し、その他の処理はサービスクラスへ委譲するべきです。
1313
1414このチュートリアルでは、アプリケーション全体でヒーローを取得できる ` HeroService ` を作成します。
15- そのサービスは ` new ` で生成するのではなく、Angular の [ * 依存性注入 * ] ( guide/dependency-injection ) で ` HeroesComponent ` のコンストラクタに注入します 。
15+ そのサービスは ` new ` で生成するのではなく、Angular による [ * 依存性の注入 * ] ( guide/dependency-injection ) で、 ` HeroesComponent ` コンストラクタに注入します 。
1616
17- また、サービスは異なるクラス間で情報を共有する最適な方法です 。
17+ サービスは、 _ お互いを知らない _ クラスの間で情報を共有する最適な方法です 。
1818このチュートリアル後半でも ` MessageService ` を作成し、次の2クラスに注入します。
1919
20201 . ` HeroService ` : メッセージを送信するため
@@ -28,7 +28,7 @@ Angular CLI を使用して `HeroService` を作成しましょう。
2828 ng generate service hero
2929</code-example >
3030
31- このコマンドは ` HeroService ` のスケルトンファイルを ` src/app.hero.service.ts ` に生成します。また、生成される ` HeroService ` クラスを次に記載します 。
31+ このコマンドは ` HeroService ` のスケルトンファイルを ` src/app.hero.service.ts ` に生成します。` HeroService ` クラスは次のようになっているはずです 。
3232
3333<code-example path="toh-pt4/src/app/hero.service.1.ts" region="new"
3434 title="src/app/hero.service.ts (new service)" linenums="false">
@@ -40,7 +40,7 @@ Angular CLI を使用して `HeroService` を作成しましょう。
4040
4141` @Injectable() ` デコレータは、このサービス自体が依存関係を注入している可能性があることを示しています。
4242現時点で依存関係があるわけではありませんが、[ この後すぐに設定します] ( #inject-message-service ) 。
43- 依存関係の有無にかかわらず、デコレータを付けておくことは良い心がけです 。
43+ 依存関係の有無にかかわらず、このデコレータを付けておくとよいでしょう 。
4444
4545<div class =" l-sub-section " >
4646
@@ -58,7 +58,7 @@ Angular の [スタイルガイド](guide/styleguide#style-07-04) ではそれ
5858
5959この章の実装では、引き続き _ モックヒーロー_ を使用します。
6060
61- 続いて、 ` Hero ` および ` HEROES ` をインポートします。
61+ ` Hero ` および ` HEROES ` をインポートします。
6262
6363<code-example path =" toh-pt4/src/app/hero.service.ts " region =" import-heroes " >
6464</code-example >
@@ -71,15 +71,14 @@ Angular の [スタイルガイド](guide/styleguide#style-07-04) ではそれ
7171{@a provide}
7272## ` HeroService ` の提供
7373
74- ` HeroService ` を使用するためには、Angular がそれを ` HeroesComponent ` へ注入するよりも前に、 [ 手順 ] ( #inject ) 通り _ 依存性注入システム _ に _ 提供_ する必要があります。
74+ Angularが ` HeroesComponent ` へ注入する( [ 次に ] ( #inject ) おこないます)よりも前に、 _ 依存性の注入システム _ に ` HeroService ` を _ 提供_ する必要があります。
7575
7676` HeroService ` を _ 提供_ する方法はいくつか存在し、` HeroesComponent ` 、` AppComponent ` または ` AppModule ` で行うことができます。
7777また、それぞれの方法にはメリット・デメリットが存在します。
7878
7979このチュートリアルでは、 ` AppModule ` 内で提供を行います。
8080
81- Angular CLI コマンドに ` --module=app ` オプションを付与することで、提供を自動化できます。
82- よく利用するオプションなので覚えておくと良いでしょう。
81+ ` --module=app ` オプションを付与して提供を自動化するようにCLIに伝えるのが一般的な選択です。
8382
8483<code-example language =" sh " class =" code-shell " >
8584 ng generate service hero --module=app
@@ -121,14 +120,14 @@ _providers_ についてより詳しく知りたい方は [NgModules](guide/ngmo
121120
122121### ` HeroService ` の注入
123122
124- ` HeroService ` 型の非公開プロパティである ` heroService ` をコンストラクタに追加しましょう。
123+ ` HeroService ` 型のプライベートプロパティである ` heroService ` をコンストラクタに追加しましょう。
125124
126125<code-example path =" toh-pt4/src/app/heroes/heroes.component.ts " region =" ctor " >
127126</code-example >
128127
129- このパラメータは private な ` heroService ` プロパティとして定義されると同時に、 ` HeroService ` を注入すべき場所として認識されます。
128+ このパラメータはプライベートな ` heroService ` プロパティとして定義されると同時に、 ` HeroService ` を注入すべき場所として認識されます。
130129
131- Angular が ` HeroesComponent ` を生成する際、その [ 依存性注入 ] ( guide/dependency-injection ) システムは ` heroService ` パラメータを ` HeroService ` のシングルトンインスタンスとして設定します。
130+ Angular が ` HeroesComponent ` を生成する際、[ 依存性の注入 ] ( guide/dependency-injection ) システムは ` heroService ` パラメータを ` HeroService ` のシングルトンインスタンスとして設定します。
132131
133132### _ getHeroes()_ の追加
134133
@@ -170,20 +169,22 @@ Angular が `HeroesComponent` を生成する際、その [依存性注入](guid
170169現在のサービスはモックヒーローを返しているのでこれを免れていますが、
171170リモートサーバーからヒーローデータを取得するにあたり、この処理は _ 非同期_ ということに気づくでしょう。
172171
173- ` HeroService ` はサーバーのレスポンスを待機しなければならないため、` getHeroes() ` は即座にヒーローデータを返すことができません。
174- またその際、ブラウザの処理をブロックしてはならないので、` HeroService.getHeroes() ` は何らかの非同期処理を実装する必要があります。
172+ ` HeroService ` はサーバーのレスポンスを待たなければならず、` getHeroes() ` は即座にヒーローデータを返すことができません。
173+ そしてそのサービスが待機している間、ブラウザはブロックされないでしょう。
174+
175+ ` HeroService.getHeroes() ` は何らかの非同期処理を実装する必要があります。
175176
176177それには、コールバック関数、` Promise ` 、または ` Observable ` を使用することができるでしょう。
177178
178- この章では、` HeroService.getHeroes() ` の返り値として ` Observable ` を選択します 。
179+ この章では、` HeroService.getHeroes() ` は ` Observable ` を返します 。
179180なぜなら、後にヒーローデータの取得で利用する Angular の [ ` HttpClient.get() ` ] ( guide/http ) メソッドが ` Observable ` を返すからです。
180181
181182### Observable _ HeroService_
182183
183- ` Observable ` は [ RxJS ライブラリ] ( http://reactivex.io/rxjs/ ) のキークラスです 。
184+ ` Observable ` は [ RxJS ライブラリ] ( http://reactivex.io/rxjs/ ) で重要なクラスのひとつです 。
184185
185186[ HTTP に関する後の章] ( tutorial/toh-pt6 ) , でも Angular の ` HttpClient ` メソッドが ` Observable ` を返すことに触れるでしょう。
186- この章では、RxJS の ` of() ` 関数をサーバーから取得したデータに見立てます 。
187+ この章ではRxJSの ` of() ` 関数を使ってサーバーからのデータの取得をシミュレートします 。
187188
188189` HeroService ` を開き、` Observable ` および ` of ` を ` RxJS ` からインポートします。
189190
@@ -195,12 +196,11 @@ title="src/app/hero.service.ts (Observable imports)" region="import-observable">
195196
196197<code-example path =" toh-pt4/src/app/hero.service.ts " region =" getHeroes-1 " ></code-example >
197198
198- ` of(HEROES) ` は ` Observable<Hero[]> ` を返します。
199- また、` Observable<Hero[]> ` はモックヒーローの配列を _ ひとつ_ 出力します。
199+ ` of(HEROES) ` は _ ひとつの値_ 、すなわちモックヒーローの配列を出力する ` Observable<Hero[]> ` を返します。
200200
201201<div class =" l-sub-section " >
202202
203- 後に行う [ HTTP のチュートリアル] ( tutorial/toh-pt6 ) では、` HttpClient.get <Hero[]>() ` を呼び出します。この返り値もまた、 HTTPレスポンスの結果からなる ` Observable <Hero[]>` であり、同様に _ ひとつ _ のヒーローリストを出力します 。
203+ [ HTTP のチュートリアル] ( tutorial/toh-pt6 ) では、_ ひとつの値 _ 、すなわちHTTPレスポンスボディ由来のヒーローの配列を出力する ` Observable <Hero[]>` を同じように返す ` HttpClient.get <Hero[]>() ` を呼び出します 。
204204
205205</div >
206206
0 commit comments