エンタープライズ フロントエンドアプリケーション アーキテクチャ
(medium.com)-
コードベースが大きくなるということ = 理解も修正も難しくなるということ
-
解決方法は? コードベースを小さく保てばよい。
-
ドメインごとのコードベース分離 & マイクロフロントエンドが解決策に!
-
モノレポ内でのライブラリの依存関係設定 & 依存性確認などのニーズは Nx の導入で解決
-
コードをアプリケーションとライブラリに分離
-
アプリケーションは依存性および設定注入の役割
-
ライブラリに機能の大半を実装
- ライブラリには汎用的に使えるデザインシステム、国際化、サードパーティーモジュールだけでなく、ホームページのヒーローバナー、商品詳細ページ、注文履歴など、再利用しないコードまで記述。
Feature ライブラリ
-
基本的に、1つのページで使われるすべてのコンポーネントは同名の Feature ライブラリに記述
- 例)
accountドメインのSignInPageページのすべてのコンポーネントはaccount/feature-sign-inライブラリに記述
- 例)
-
同じドメインの2つ以上のページで共有するコンポーネントは、そのドメイン内の別の feature として分離
- 例)
accountドメインのSignInPageとSignUpPageでKakaoLoginButtonコンポーネントを共通利用するなら、そのコンポーネントはaccount/feature-social-loginライブラリに記述
- 例)
-
異なるドメインのページ間で共有するコンポーネントは、共通ドメイン内の別の feature として分離
- 例)
landingドメインのHomePageとclassroomドメインのLecturePageで共有するGlobalNavigationコンポーネントはshared/feature-navigationライブラリに記述
- 例)
Shell ライブラリ
-
Feature、UI ライブラリのコンポーネントを組み合わせてページを作成
- 例)
SignInPageコンポーネントは account/shell-kr-web ライブラリのコンポーネント。ここにはSignUpPage、PhoneVerificationPageなどがある。
- 例)
-
Shell ライブラリは、アプリケーションに提供される特定ドメインのエントリーポイント
-
アプリケーションごとに異なるエントリーポイントを提供できる
-
例えば..
-
HomePageコンポーネントで使うコンポーネントはlanding/feature-homeライブラリに記述されている。 -
しかし同じ
HomePageでも、米国サイトのHomePageなのか、日本サイトのHomePageなのか、韓国サイトのHomePageなのかによって構成は異なるはず。 -
したがって、
landingドメインにアクセスする各アプリケーション向けのshellライブラリを作成できる。(shell-us-web,shell-jp-web,shell-kr-web)
-
Provider ライブラリ
-
2つ以上の Feature ライブラリで共有する状態を管理するライブラリ
- 例) ログイン状態を管理する
shared/provider-auth-state
- 例) ログイン状態を管理する
UI ライブラリ
- 2つ以上のライブラリで共有する Presentational コンポーネントの集合。
Utility ライブラリ
-
上記4分類に該当しないすべてのモジュール
-
CLASS101 のドメインモデルとは無関係に、テストおよびデプロイが可能なレベルで独立した機能を提供する必要がある。
- 例)
shared/utils-apollo-client,shared/utils-i18n
- 例)
アプリケーション
- 設定および依存性管理の役割だけを担うようになる = アプリケーションのコードはほとんどない
まだコメントはありません。