Gridwich のプロジェクトの名前付けと名前空間

Azure Functions

Gridwich は、複数のプロジェクトで構成される .NET 6 ソリューションです。 コード プロジェクトでは、アプリケーションの構造を理解しやすくし、関連するコードをすばやく検索できるように、また、プロジェクトの名前付けで自転車置き場の議論を減らすために、名前付け規則を用意することが重要です。

Gridwich システムには、 CoreHost.FunctionAppSagaParticipants という 3 つの主要なコンポーネントがあります。

  • Core プロジェクトには、システム全体のインターフェイス、モデル、データ転送オブジェクト (DTO)、および基本クラスがあります。

    Core.{Technology} プロジェクトには、さまざまな機能実装で使用されるクライアント クラスと基本機能があります。

  • Host.FunctionApp プロジェクトは、システム全体に対するパブリック インターフェイスです。

  • SagaParticipants プロジェクトでは、分析、エンコード、公開、保存などの外部関数の機能が提供されます。

    SagaParticipants.{Capability} プロジェクトでは、機能によって生成されるインターフェイス、例外、およびイベントが記述されます。

    SagaParticipants.{Capability}.{Technology} プロジェクトでは、実際の機能実装、イベント リスナー、機能固有の機能が提供されます。

Gridwich Technology は、機能またはコア機能の実際の実装です。 {Technology} プロジェクトは、使用法に応じて、Core または SagaParticipants.{Capability} 名前空間とプロジェクト名のいずれかになります。

プロジェクトの作成

新しい Gridwich プロジェクトに名前を付けるときは、次のデシジョン ツリーを使用できます。

コードは、基本クラス、インターフェイス、モデル、DTO、サービス拡張などのコントラクトですか。

  • はい: コードは、特定の容量またはサービスに関連していますか。

    • はい: Gridwich.SagaParticipants.{Capability}
    • いいえ: Gridwich.Core
  • いいえ: コードは、イベント リスナーまたは特定のテクノロジの実装に関連していますか。

    • はい: コードは複数のサービスで使用されますか。

      • はい。たとえば、SDK ラッパー Gridwich.Core.{Technology} です。
      • いいえ: Gridwich.SagaParticipants.{Capability}.{Technology}
    • いいえ: コードは特定の機能に関連していますか。

      • はい: Gridwich.SagaParticipants.{Capability}

      • いいえ: コードは Azure 関数アプリのエンドポイントですか。

        • はい: Gridwich.Host.FunctionApp
        • いいえ: Gridwich.Core

プロジェクト構造

各パッケージには、次の 2 つの子サブディレクトリがあります。

  • src には、テスト以外の実稼働コードが含まれます。
  • tests には、単体テストが含まれます。

tests サブディレクトリはすべてのプロジェクトにありますが、パッケージの単体テストがない場合、このディレクトリは空になることがあります。

2 つのサブディレクトリそれぞれに、コードをビルドするための C# またはその他のファイル、および .csproj ファイルが含まれます。 .csproj のファイル名はパッケージ名に従い、たとえば次のようになります。

  • Gridwich.Host.FunctionApp/src/Gridwich.Host.FunctionApp.csproj
  • Gridwich.Host.FunctionApp/tests/Gridwich.Host.FunctionAppTests.csproj

パッケージで使用されるコード名前空間もこの規則に従い、たとえば次のようになります。

  • Gridwich.Host.FunctionApp
  • Gridwich.Host.FunctionAppTests

ビルドおよびテストのサイクル中に、 binobjTestResults のような一時的なディレクトリが表示されます。これらには、git の対象となるアーティファクトは含まれていません。 これらの一時的なディレクトリは dotnet clean 処理によってクリーンアップされます。

プロジェクト名と名前空間

Gridwich のプロジェクト名と名前空間には、次の特性があります。

Core および SagaParticipants テクノロジ名前空間

主に自転車置き場の議論を避けるために、Gridwich.Core.{Technology} 名前空間にはテクノロジの目的が含まれていません。 Core 名前空間は、SagaParticipants または Host.FunctionApp プロジェクトで使用される内部プロジェクトであり、適切に定義された名前は必要ありません。

たとえば、Gridwich.Core.EventGrid プロジェクトは Gridwich.Core.Events.EventGrid または Gridwich.Core.Messaging.EventGridです。 ただし、Core のプロジェクト名は、テクノロジがコア システムに寄与することを既に示唆しています。

テクノロジは、複数の方法でシステムに寄与する場合もあります。 たとえば、使用法に応じて Redis をデータ ストアまたはメッセージング トランスポートと呼ぶことができますが、常に同じ SDK ラッパーが使用されます。

Gridwich.SagaParticipants.Encode.CloudPort および Gridwich.SagaParticipants.Encode.Flip テクノロジ名前空間では、Gridwich.SagaParticipants.Encode 名前空間のコンポーネントが使用されます。 このコードは、エンコード タスクに固有であり、公開などの他の機能には入り込まないため、Gridwich.Core.Encode 名前空間の下にはありません。

SagaParticipants パッケージ

すべての Gridwich.SagaParticipants パッケージが外部イベントを処理するわけではありません。 Gridwich.SagaParticipants の下のパッケージには、外部要求を処理する他の saga 参加要素の機能を提供するものもあります。

複数のエンコード テクノロジ パッケージ間でコードを共有する Gridwich.SagaParticipants.Encode パッケージに加えて、Gridwich.SagaParticipants.Encode.TelestreamCloud のような特殊化されたパッケージもあります。 Telestream パッケージでは、外部の Vantage Telestream システムへのアクセスが Gridwich に提供されます。 Flip および CloudPort saga 参加要素は、Telestream パッケージを使用して独自の要求処理を提供します。

パッケージ名とその他の名前空間

using ステートメントを最小限に抑えるために、Gridwich では、パッケージ コンテンツをパッケージ名が示す名前空間に制限していません。 一部のパッケージは、他の名前空間にエンティティを提供しています。 たとえば、パッケージ Gridwich.Core.Tests では Gridwich.Core.Helpers.TestHelpers クラスが提供されます。

ただし、各パッケージでは、パッケージ名と一致する実稼働コードの DLL が src に、 単体テスト (存在する場合) の DLL が tests にビルドされます。 テスト DLL 名はパッケージ名と同じですが、Tests というサフィックスが付きます。

次の手順

製品ドキュメント:

Microsoft Learn モジュール: