mcpField
M
mvc-master

mvc-master

github.com/gravito-framework開発264 回インストール28 週間前に更新
リポジトリ

mvc-master について

Gravito でエンタープライズ MVC アプリケーションを構築する開発者向けの設計ガイドです。各レイヤーの役割と、スキーマからルートまでの実装順序を示します。

主な機能

  1. 01エンタープライズ MVC の構成定義
  2. 02コントローラー、サービス、リポジトリーの分離
  3. 03TypeScript のコードパターン
  4. 04実装ワークフローの提示
  5. 05依存性逆転の推奨

活用シーン

  1. 01Gravito MVC プロジェクトの構成設計
  2. 02HTTP 処理とビジネスロジックの分離
  3. 03リポジトリーによるデータアクセスの整理

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/gravito-framework/gravito --skill mvc-master

インストール後、Claude Code で/mvc-masterを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

assets/
.keep
references/
.keep
scripts/
.keep

詳細

Gravito エンタープライズ MVC マスター

大規模なエンタープライズグレードの MVC システムを専門とするシニアシステムアーキテクトです。Gravito フレームワークを使用して、関心の分離を厳密に徹底し、保守しやすい抽象化を実現することを目指します。

🏢 ディレクトリ構造(「エンタープライズ標準」)

エンタープライズ MVC プロジェクトでは、次のレイアウトに従います。

src/
├── Http/              # Transport Layer
│   ├── Controllers/   # HTTP handlers (Thin)
│   ├── Middleware/    # Request interceptors
│   └── Kernel.ts       # Middleware management
├── Services/          # Business Logic Layer (Fat)
├── Repositories/      # Data Access Layer
├── Models/            # Database Entities (Atlas)
├── Providers/         # Service Providers (Standard Bootstrapping)
│   ├── AppServiceProvider.ts
│   ├── DatabaseProvider.ts
│   └── RouteProvider.ts
├── Exceptions/        # Custom error handling
├── bootstrap.ts        # App Entry Point
└── routes.ts          # Route definitions
config/                # App, DB, Auth, Cache, Logging
database/              # migrations/ and seeders/

🛠️ レイヤーの責務

1. コントローラー(src/Http/Controllers/)
  • ルール:薄いレイヤーにします。ビジネスロジックは含めません。
  • タスク:リクエストを解析 -> サービスを呼び出す -> JSON を返す。
  • SOP:基底の Controller を継承して、this.success() と this.error() を使用します。
2. サービス(src/Services/)
  • ルール:厚いレイヤーにします。アプリケーションの「頭脳」です。
  • タスク:ビジネスロジックを調整し、複数のリポジトリーを呼び出し、イベントを発行します。
  • SOP:リポジトリーにはコンストラクターインジェクションを使用します。
3. リポジトリー(src/Repositories/)
  • ルール:単一責任を守ります。SQL/Atlas クエリーのみを扱います。
  • タスク:データベースの複雑さを吸収します。ビジネスルールは含めません。
4. モデル(src/Models/)
  • ルール:Atlas エンティティです。リレーションシップはここで定義します。

📜 コードのひな形

基底コントローラーのヘルパー
export abstract class Controller {
  protected success<T>(data: T, message = 'Success') {
    return { success: true, message, data }
  }
}
サービスパターン(インジェクション)
export class ProductService {
  constructor(private productRepo = new ProductRepository()) {}

  async create(data: any) {
    // Business logic...
    return await this.productRepo.save(data)
  }
}

🚀 ワークフロー(SOP)

  1. スキーマ設計:database/migrations/ でモデルとマイグレーションを計画します。
  2. モデルの実装:src/Models/ に Atlas エンティティを作成します。
  3. リポジトリーの実装:src/Repositories/ にデータアクセスクラスを作成します。
  4. サービスの実装:src/Services/ にビジネスロジッククラスを作成します。
  5. コントローラーの実装:src/Http/Controllers/ で HTTP リクエストをサービスに接続します。
  6. ルートの登録:src/routes.ts でコントローラーをマッピングします。

🛡️ ベストプラクティス

  • 依存性逆転:上位レベルのサービスは、下位レベルのデータベースの詳細に依存させません。アダプターとしてリポジトリーを使用します。
  • プロバイダーパターン:コアサービスをシングルトンにする必要がある場合は、必ず AppServiceProvider に登録します。
  • ボディーのキャッシュ:コントローラーでは、リクエストボディーを複数回安全に読み取るために c.get('parsed_body') を使用します。

コメント