Contoh proyek .NET Core dengan database MongoDB dengan replika dan transaksi diaktifkan.
Tujuan dari proyek ini adalah untuk memberikan solusi terhadap subjek di bawah ini (digunakan untuk wawancara kerja):
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.
Ini adalah proyek API web asp core 3.1 dengan arsitektur n-tiers:
Setiap lapisan memiliki lapisan abstraksinya sendiri untuk menghindari ketergantungan. Saya menggunakan mesin IOC dan DI stock .net core.
Saya tidak melakukan Tes Unit apa pun karena tidak ada logika bisnis. Namun, saya telah membuat contoh Tes Integrasi menggunakan perpustakaan Microsoft WebHost . Anda dapat menjalankan Tes Integrasi melalui visual studio atau baris perintah, tetapi jangan lupa untuk menjalankan docker-compose terlebih dahulu (jika tidak, Anda tidak akan memiliki database apa pun untuk diminta).
Implementasi DAL menggunakan driver MongoDB C#. Dengan menjalankan docker-compose yang dilampirkan pada solusi, Anda akan mendapatkan instance server Mongo dengan replika yang diaktifkan (untuk mendukung transaksi).
Sebagai demonstrasi penggunaan salah satu fitur lanjutan MongoDB, saya telah memilih transaksi. Jadi IClientSessionHandle disuntikkan di semua repositori. Saya juga berhasil membuat middleware bernama TransactionFilter yang membuat transaksi untuk seluruh permintaan HTTP. Dengan cara ini, kita dapat melakukan operasi multi-dokumen, pada repositori berbeda, yang dapat melakukan rollback jika terjadi masalah, tanpa menangani transaksi multi-dokumen secara manual.
Contoh :
Ini berfungsi sebagaimana adanya tetapi memerlukan pengujian beban lebih lanjut. Ini mungkin belum siap produksi.
Menggunakan docker-compose up di baris perintah sepertinya tidak berfungsi dengan API saat ini. Saya tidak punya banyak waktu lagi jadi saya terus menggunakan VS untuk menulis.