لاحظ أنه يمكن العثور على الوثائق الكاملة بما في ذلك الأدلة ومرجع واجهة برمجة التطبيقات على موقع المساعدة.
لدي أيضًا سلسلة حول الانتقال من بنية "طبقة البصل" إلى الاستفادة من نمط الأوامر الوسيطة في سلسلة من المنشورات على مدونتي.
AzureFromTheTrenches.Commanding عبارة عن إطار عمل وسيط للأوامر غير المتزامنة قائم على التكوين مع عدد من أهداف التصميم الرئيسية:
لدعم هذه الأهداف، يدعم إطار العمل .NET Standard 2.0 (والإصدارات الأحدث) وبالتالي يمكن استخدامه في مجموعة واسعة من السيناريوهات ويتوفر عدد من حزم الامتدادات الاختيارية بالكامل لتمكين:
لا تحتاج إلى الاستفادة من هذه الوظيفة ولكن يمكنك، إذا أردت، اعتمادها بمرور الوقت دون تغيير الكود الأساسي الخاص بك.
قم أولاً بتثبيت حزمة nuget للأمر:
Install-Package AzureFromTheTrenches.Commanding
كمثال، لنقم بإنشاء أمر يجمع رقمين معًا ويعيد النتيجة:
public class MathResult
{
public int Value { get; set; }
}
public class AddCommand : ICommand
{
public int FirstNumber { get; set; }
public int SecondNumber { get; set; }
}
يتم تنفيذ الأوامر بواسطة المعالجات ويبدو معالج الإضافة الخاص بنا كما يلي:
public AddCommandHandler : ICommandHandler
{
public Task ExecuteAsync(AddCommand command, MathResult previousResult)
{
return new MathResult {
Value = command.FirstNumber + command.SecondNumber
};
}
}
بعد تحديد الأمر والنتيجة والمعالج، نحتاج إلى تسجيلها في نظام القيادة. إذا كنت تكتب تطبيق وحدة تحكم فقط، فيمكنك القيام بذلك في Program.cs ولكن للاستخدام الأكثر واقعية، يمكنك القيام بذلك حيث تقوم بتكوين حاوية IoC الخاصة بك - من السهل التفكير في تسجيلات الأوامر باعتبارها مجرد جزء آخر من تكوين تطبيقاتك، إلى جانب ذلك ستحتاج إلى الوصول إلى الحاوية. يوضح المثال أدناه التسجيل لدى موفر خدمة Microsoft ASP.Net Core:
// 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();
فئة CommandingDependencyResolverAdapter عبارة عن محول يسمح بتسجيل إطار العمل مع أي حاوية IoC ويقوم أسلوب AddCommanding بتسجيل واجهات القيادة القابلة للحقن وإرجاع واجهة ICommandRegistry التي تسمح لك بتسجيل المعالجات - ما عليك سوى تسجيل معالج، وسيظهر إطار العمل من الباقي والتسجيل يستخدم نمط واجهة برمجة التطبيقات (API) بطلاقة للحصول على تعليمات برمجية موجزة وقابلة للقراءة.
لإرسال أمرنا، نحتاج إلى الحصول على واجهة ICommandDispatcher وإرسال الأمر. سنفعل ذلك ونخرج النتيجة إلى وحدة التحكم:
ICommandDispatcher commandDispatcher = dependencyResolver.ServiceProvider.GetService();
MathResult mathResult = await commandDispatcher.DispatchAsync(new AddCommand { FirstNumber = 5, SecondNumber = 6});
Console.WriteLine(mathResult.Value); // hopefully says 11
وللاستخدام البسيط هذا كل شيء. هذا المثال مبتكر بعض الشيء لأننا نقوم بحل التبعيات يدويًا وهناك الكثير من القواعد المعيارية لإضافة رقمين معًا ولكن في سيناريوهات العالم الحقيقي، كل ما عليك فعله هو تسجيل معالجات الأوامر الخاصة بك في المكان المناسب، على سبيل المثال إذا كنت إذا كنت تستخدم ASP.Net Core، فإن كل القواعد النموذجية لحقن التبعية موجودة في مكانها الصحيح.
بسيطة في تنفيذ أوامر الذاكرة https://github.com/JamesRandall/AzureFromTheTrenches.Commanding/tree/master/Samples/InMemoryCommanding
إرسال الأوامر عبر HTTP https://github.com/JamesRandall/AzureFromTheTrenches.Commanding/tree/master/Samples/HttpCommanding.Client
تنفيذ الأوامر استجابة لطلبات HTTP (ASP.Net Core) https://github.com/JamesRandall/AzureFromTheTrenches.Commanding/tree/master/Samples/HttpCommanding.Web
الإرسال إلى قوائم انتظار تخزين Azure والتنفيذ منها https://github.com/JamesRandall/AzureFromTheTrenches.Commanding/tree/master/Samples/AzureStorageQueueCommanding
تدقيق تخزين Azure https://github.com/JamesRandall/AzureFromTheTrenches.Commanding/tree/master/Samples/AzureStorageAuditing
تدقيق مركز أحداث Azure https://github.com/JamesRandall/AzureFromTheTrenches.Commanding/tree/master/Samples/AzureEventHubAuditing
يمكن العثور على المزيد من سيناريوهات الاستخدام في الويكي بما في ذلك:
إذا واجهتك مشكلة، قم بتسجيل مشكلة GitHub أو تابعني على Twitter على @azuretrenches وسأساعدك إذا استطعت.