Perhatikan bahwa dokumentasi lengkap termasuk panduan dan referensi API dapat ditemukan di situs bantuan.
Saya juga memiliki seri peralihan dari arsitektur "lapisan bawang" ke penggunaan pola perintah yang dimediasi dalam serangkaian postingan di blog saya.
AzureFromTheTrenches.Commanding adalah kerangka kerja mediator perintah asinkron berbasis konfigurasi dengan sejumlah tujuan desain utama:
Untuk mendukung tujuan ini, kerangka kerja ini mendukung .NET Standard 2.0 (dan lebih tinggi) sehingga dapat digunakan dalam berbagai skenario dan sejumlah paket ekstensi opsional tersedia untuk diaktifkan:
Anda tidak perlu memanfaatkan fungsi tersebut tetapi Anda dapat, jika mau, mengadopsinya seiring waktu tanpa mengubah kode inti Anda.
Pertama instal paket nuget untuk memerintah:
Install-Package AzureFromTheTrenches.Commanding
Sebagai contoh mari kita buat perintah yang menambahkan dua angka dan mengembalikan hasilnya:
public class MathResult
{
public int Value { get; set; }
}
public class AddCommand : ICommand
{
public int FirstNumber { get; set; }
public int SecondNumber { get; set; }
}
Perintah ditindaklanjuti oleh penangan dan penangan tambahan kami terlihat seperti ini:
public AddCommandHandler : ICommandHandler
{
public Task ExecuteAsync(AddCommand command, MathResult previousResult)
{
return new MathResult {
Value = command.FirstNumber + command.SecondNumber
};
}
}
Setelah mendefinisikan perintah, hasil, dan pengendali, kita perlu mendaftarkannya ke sistem perintah. Jika Anda hanya menulis aplikasi konsol, Anda dapat melakukan ini di Program.cs tetapi untuk penggunaan yang lebih realistis, Anda akan melakukan ini saat Anda mengonfigurasi kontainer IoC - akan berguna untuk menganggap pendaftaran perintah hanya sebagai bagian lain dari konfigurasi aplikasi Anda, selain itu Anda memerlukan akses ke wadah. Contoh di bawah ini menunjukkan pendaftaran dengan Penyedia Layanan Inti Microsoft ASP.Net:
// First register the commanding framework with the IoC container
IServiceProvider serviceProvider = null;
IServiceCollection serviceCollection = new ServiceCollection();
CommandingDependencyResolverAdapter adapter = new CommandingDependencyResolverAdapter(
(fromType, toInstance) => services.AddSingleton(fromType, toInstance),
(fromType, toType) => services.AddTransient(fromType, toType),
(resolveTo) => _serviceProvider.GetService(resolveTo));
ICommandRegistry registry = adapter.AddCommanding();
serviceProvider = serviceCollection.BuildServiceProvider();
// Now register our handler
registry.Register();
Kelas CommandingDependencyResolverAdapter adalah adaptor yang memungkinkan kerangka kerja didaftarkan dengan wadah IoC apa pun dan metode AddCommanding mendaftarkan antarmuka perintah yang dapat disuntikkan dan mengembalikan antarmuka ICommandRegistry yang memungkinkan Anda mendaftarkan penangan - Anda hanya perlu mendaftarkan penangan, kerangka kerja akan muncul keluarkan sisanya dan pendaftaran menggunakan gaya API yang lancar untuk kode ringkas yang dapat dibaca.
Untuk mengirimkan perintah kita, kita perlu menghubungi antarmuka ICommandDispatcher dan mengirimkan perintah. Kami akan melakukannya dan menampilkan hasilnya ke konsol:
ICommandDispatcher commandDispatcher = dependencyResolver.ServiceProvider.GetService();
MathResult mathResult = await commandDispatcher.DispatchAsync(new AddCommand { FirstNumber = 5, SecondNumber = 6});
Console.WriteLine(mathResult.Value); // hopefully says 11
Dan untuk penggunaan sederhana itu saja. Contoh ini sedikit dibuat-buat karena kita menyelesaikan dependensi dengan tangan dan ada banyak boilerplate untuk menambahkan dua angka bersama-sama tetapi dalam skenario dunia nyata yang perlu Anda lakukan hanyalah mendaftarkan penangan perintah Anda di tempat yang tepat, misalnya jika Anda sedang menggunakan ASP.Net Core maka semua boilerplate injeksi ketergantungan sudah ada.
Eksekusi perintah memori yang sederhana https://github.com/JamesRandall/AzureFromTheTrenches.Commanding/tree/master/Samples/InMemoryCommanding
Mengirimkan perintah melalui HTTP https://github.com/JamesRandall/AzureFromTheTrenches.Commanding/tree/master/Samples/HttpCommanding.Client
Menjalankan perintah sebagai respons terhadap permintaan HTTP (ASP.Net Core) https://github.com/JamesRandall/AzureFromTheTrenches.Commanding/tree/master/Samples/HttpCommanding.Web
Mengirim ke dan mengeksekusi dari antrean Azure Storage https://github.com/JamesRandall/AzureFromTheTrenches.Commanding/tree/master/Samples/AzureStorageQueueCommanding
Audit penyimpanan Azure https://github.com/JamesRandall/AzureFromTheTrenches.Commanding/tree/master/Samples/AzureStorageAuditing
Audit hub peristiwa Azure https://github.com/JamesRandall/AzureFromTheTrenches.Commanding/tree/master/Samples/AzureEventHubAuditing
Skenario penggunaan lebih lanjut dapat ditemukan di wiki termasuk:
Jika Anda mengalami kebuntuan, catat masalah GitHub atau hubungi saya di Twitter di @azuretrenches dan saya akan membantu jika saya bisa.