メインコンテンツまでスキップ
バージョン: 0.9.0 (最新)

🚀 機能

featureは、スキーマと1つ以上のルートをグループ化する便利なラッパーです。これにより、サービスファクトリを簡潔に保ちながら、複雑な動作を合成できます。


1️⃣ 構造

Featuresはcompose関数を使用して合成され、複数のコンポーネント(スキーマ、ルート、または他のfeatures)を受け取り、それらを単一の合成可能なユニットに結合します。この合成パターンにより、シンプルで再利用可能なパーツから複雑な機能を構築できます。

src/features/user.ts
import { compose } from '../primitives';
import { createUserSchema, updateUserSchema } from '../schemas/user';
import { createUserRoute, getUserRoute, findUsersRoute, updateUserRoute } from '../routes/user';

export const createUserFeature = compose(createUserSchema, createUserRoute);
export const getUserFeatures = compose(getUserRoute, findUsersRoute);
export const editUserFeatures = compose(updateUserSchema, updateUserRoute);

composeは任意の数の引数(スキーマ、ルート、他のfeatures)を単一のComposableオブジェクトにフラット化し、サービスが消費できるようにします。合成順序が重要です - スキーマは通常最初に合成され、ルート実行前にバリデーションが行われるようにします。


2️⃣ Featuresを使用する理由

  • Reusability – 複数のサービス間で同じfeatureを共有します。
  • Override-friendly – ダウンストリームアプリでfeatureを置き換えたり拡張したりできます。
  • Clarity – feature内に低レベルの詳細を隠します。

3️⃣ ベストプラクティス

  1. One responsibility – 作成、読み取り、更新、削除のために別々のfeaturesを作成します。
  2. Name consistently<verb><Entity>Feature(s)は発見を助けます。
  3. Compose schemas first – バリデーションは常にルート実行に先行する必要があります。

4️⃣ サービスでの使用

FeaturesはdefService関数を通じてサービスによって消費され、合成されたfeaturesに必要なコンテキスト(データベース接続など)を提供します。Ramdaのpartial関数は、データベース設定を事前適用するために使用され、Expressアプリケーションに簡単に統合できるサービスファクトリを作成します。

src/services/user.ts
import { compose, defService } from '../primitives';
import { partial } from 'lodash';
import { createUserFeature, getUserFeatures, editUserFeatures } from '../features/user';

export const userService = (db: any, configuration: any) =>
defService(
partial(
compose(editUserFeatures, getUserFeatures, createUserFeature),
{ dataStores: db, configuration }
)
);

このパターンにより、テスト、保守、拡張が容易なクリーンでモジュール化されたサービスを作成できます。サービスファクトリパターンにより、データベース接続やその他の依存関係がfeaturesに適切に注入されます。


➡️ 次へ

Service Componentを学習して、featuresが完全なサービスにどのように合成されるかを理解してください。すべてのサービスは同じパターンと規則に従います!