โปรดทราบว่าคุณสามารถดูเอกสารฉบับเต็มรวมถึงคำแนะนำและข้อมูลอ้างอิง API ได้ที่ไซต์ช่วยเหลือ
ฉันยังมีซีรีส์เกี่ยวกับการย้ายจากสถาปัตยกรรม "เลเยอร์หัวหอม" ไปเป็นการใช้รูปแบบคำสั่งที่เป็นสื่อกลางในชุดโพสต์ในบล็อกของฉัน
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 Service Provider:
// 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 Storage 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 แล้วฉันจะช่วยถ้าทำได้