Gridwich は、複数のプロジェクトで構成される .NET 6 ソリューションです。 コード プロジェクトでは、アプリケーションの構造を理解しやすくし、関連するコードをすばやく検索できるように、また、プロジェクトの名前付けで自転車置き場の議論を減らすために、名前付け規則を用意することが重要です。
Gridwich システムには、 Core
、 Host.FunctionApp
、SagaParticipants
という 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}
- はい。たとえば、SDK ラッパー
いいえ: コードは特定の機能に関連していますか。
はい:
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
ビルドおよびテストのサイクル中に、 bin
、 obj
、TestResults
のような一時的なディレクトリが表示されます。これらには、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 モジュール: