レプリカセットとトランザクションが有効になっている MongoDB データベースを含むサンプル .NET Core プロジェクト。
このプロジェクトの目標は、(就職面接で使用される) 以下の主題に対する解決策を提供することです。
Please create a sample .net/C# project that includes the following elements:
- Basic CRUD functionality for a data structure of your choice.
- RESTful APIs to expose that functionality with your framework of choice (ASP.NET Web APIs, ASP.NET Core, ServiceStack (preferred), …etc).
- Uses MongoDB using C# driver.
- Please demonstrate your usage of one of MongoDB advanced features (aggregation, transactions, indexes, …etc) using C# driver.
- Please push your code to a Git repository that you can share with us.
これは、n 層アーキテクチャの ASP コア 3.1 Web API プロジェクトです。
各層には、依存関係を回避するために独自の抽象化層があります。私は標準の .net core IOC および DI エンジンを使用しています。
ビジネス ロジックがないため、単体テストは作成しませんでした。ただし、 Microsoft WebHost ライブラリを使用して統合テストのサンプルを作成しました。 Visual Studio またはコマンド ラインを使用して統合テストを実行できますが、最初にdocker-compose を実行することを忘れないでください (そうしないと、要求するデータベースがなくなります)。
DAL の実装には、MongoDB C# ドライバーが使用されます。ソリューションに添付されている docker-compose を実行すると、(トランザクションをサポートするために)レプリカセットが有効になったMongo サーバーのインスタンスが取得されます。
MongoDB の高度な機能の 1 つの使用法のデモンストレーションとして、トランザクションを選択しました。したがって、 IClientSessionHandleはすべてのリポジトリに挿入されます。また、HTTP リクエスト全体のトランザクションを作成するTransactionFilterというミドルウェアを作成することもできました。こうすることで、複数ドキュメントのトランザクションを手動で処理することなく、別のリポジトリで複数ドキュメントの操作を行うことができ、問題が発生した場合にロールバックすることができます。
例 :
現状でも動作していますが、さらに負荷テストが必要です。これは本番環境に対応していない可能性があります。
現時点では、コマンドラインでdocker-compose up を使用しても API では機能しないようです。時間があまりなかったので、VS を使って作曲を続けました。