フロントエンドの設計で考えることをざっくりとまとめた話
フロントエンドで設計を考えてることを雑に言語化。 要件に応じた設計を考えるとき、個人的に再利用性と依存関係から設計を考えることが多い。 (書き込み要件が多い場合を除く)
再利用性
- コンポーネントの再利用性
- データ構造の再利用性
- データロジックの再利用性
- データの再利用性
依存関係 (今回割愛)
- コンポーネントが、状態管理や外部へのリクエストをどこまで依存を許可するか
再利用性を考えるのに、それぞれの分散が一般的かを考えてレイヤー分けを考える
1. コンポーネントの場合、
- 分散の高いコンポーネントが多いかどうか
- 分散とは、ページをまたがって使われているかどうか。以下、例
- セレクト便のあるコンポーネントは、Top画面やセレクト便画面で使われている
- 商品のとあるコンポーネントは、Top画面やカート画面で使われている
- ユーザアカウントに属するコンポーネントは、Top画面や、マイページ画面で使われている
- 分散とは、ページをまたがって使われているかどうか。以下、例
- レイヤーの判断
- 分散の高いドメインコンポーネントが3つ以上存在する → どのページからアクセスできるところにドメインコンポーネントを置けるようにする
2. データ構造の再利用性を考える場合
- コンポーネントの場合と同様、3つ以上の画面で使われている & コンポーネントに依存せずに使われている
- レイヤーの判断
- 複数の画面で使われている & コンポーネントに依存せずに使われている → models ディレクトリの作成
- コンポーネント依存 → コンポーネントに書く
- コンポーネントに依存せずが、重要。大抵は、コンポーネントに依存したロジック
- vitanote-jpでは、modelsディレクトリを作っていない。
3. データロジックを考える場合は、データ構造と同様
- レイヤーの判断
- 3つの画面で使われている & コンポーネントに依存せずに使われている → hooksディレクトリを作成
- コンポーネント依存 → コンポーネントに書く
4. データの再利用性
- 状態管理やキャッシュの話
- コンポーネントの場合と同様、3つの画面で使われているかどうか
- 一度取得した生のデータをどれぐらい使い回すか、
- 一度取得したデータの編集ロジックをどれぐらい使うか、
- Redux Flow で考えるとわかりやすい??
- レイヤーの判断
- 一度取得した生のデータを3つ以上の画面で使う → storeレイヤーを追加し、global storeとしてデータに保存
- 一度取得した生のデータを2つの画面で使う → contextレイヤーを追加し、useContextなどを利用する
- 一度取得したデータの編集ロジック を 3つ以上画面で使う → selector のレイヤーを入れれ、取得したデータを整理する