狛ログ

2022年8月3日水曜日

【Angular】コンポーネントの設計(機能内の画面構成設計)について。

オフィス狛 技術部のKoma(Twitterアカウントの中の人&CEO)です。

今回は、弊社内のAngularプロジェクトでのコンポーネントの設計のルールを記載しようと思います。

2記事に分けて「コンポーネントの設計」についてお届けしますが、今回は「機能内の画面構成設計」となります。
(次回は「画面ごとの設計」になります)

それでは、今回は、『アカウント登録処理』を例に、コンポーネントの設計を説明しようと思います。

(1)まずは必要な画面と、画面遷移を考える

「アカウント登録処理」として、以下のような画面が必要と想定されます。

①登録情報入力画面
②入力情報確認画面
③登録完了画面

当然、画面遷移としては以下になりますね。

(2)機能としてのディレクトリ構成を考える

では、次は「アカウント登録処理」として、ディレクトリ構成を考えます。
各画面の設計の前に、「機能」としての設計をする、って事ですね。

まず、何も機能が無いAngularプロジェクトだと、
  1. src/
  2. app/
  3. app-routing.module.ts
  4. app.component.html
  5. app.component.ts
  6. app.module.ts
となっています。

ここに「アカウント登録処理」を追加するとしたら、以下のようになります。
  1. src/
  2. app/
  3. account/
  4. containers/
  5. account/
  6. account.component.html
  7. account.component.spec.ts
  8. account.component.ts
  9. account-routing.module.ts
  10. account.module.ts
いきなり「containers」ディレクトリが出てきましたが、後ほど説明しますので、一旦スルーしてください。
ここでは、「account」と言う「アカウント登録処理」を示すコンポーネントを作った、と言うことになります。
図で表すと、
となります。これだけだと、「??」って感じですが、とりあえず先へ進みます。

(3)各画面のディレクトリ構成を考える

続いて、各画面のディレクトリ構成を考えてみます。
画面が3つだから、ディレクトリも3つで、コンポーネントとしても3つ・・・はい、最初はその考えで大丈夫です。
Angularに限らず、コンポーネント設計で重要なのは、まずは、ざっと大きめな区分けで考えておいて、後から細分化していく、です。

と言うことで、以下のような構成になります。
  1. src/
  2. app/
  3. account/
  4. containers/
  5. account/
  6. account-register/
  7. account-register.component.html
  8. account-register.component.spec.ts
  9. account-register.component.ts
  10. account-register-confirm/
  11. account-register-confirm.component.html
  12. account-register-confirm.component.spec.ts
  13. account-register-confirm.component.ts
  14. account-register-complete/
  15. account-register-complete.component.html
  16. account-register-complete.component.spec.ts
  17. account-register-complete.component.ts

図で表すと、
こんな感じですね。
なんとなくイメージが出来るようになって来ました。

ついでなので、ルーティングの設定も記載しておきます。
[app-routing.module.ts]
  1. {
  2. path: 'account',
  3. loadChildren: () =>
  4. import('./account/account.module').then(m => m.AccountModule),
  5. },

[account-routing.module.ts]
  1. const routes: Routes = [
  2. {
  3. path: '',
  4. component: AccountComponent,
  5. children: [
  6. { path: '', redirectTo: 'register' },
  7. {
  8. path: 'register',
  9. component: AccountRegisterComponent,
  10. },
  11. {
  12. path: 'register-confirm',
  13. component: AccountRegisterConfirmComponent,
  14. },
  15. {
  16. path: 'register-complete',
  17. component: AccountRegisterCompleteComponent,
  18. },
  19. ],
  20. },
  21. ];

上記を元に、先ほどの図にURLを記載すると、以下のようになります。

今回はここまで。

次回は、さらに細分化して「画面ごとのコンポーネント設計」を見て行こうと思います。


0 件のコメント:

コメントを投稿