الخدمات المصغرة باستخدام C# (.NET): الهندسة والممارسة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

الخدمات المصغرة بلغة C# (.NET): من النظرية إلى التطبيق



في تطوير البرمجيات الحديثة، أصبحت بنية الخدمات المصغرة المعيار لبناء أنظمة قابلة للتوسع ومتسامحة مع الأخطاء. توفر منصة .NET جميع الأدوات اللازمة لإنشاء خدمات مصغرة موثوقة بلغة C#. في هذه المقالة، سنستعرض المبادئ الأساسية للبنية، وأمثلة عملية للكود، وأفضل الممارسات التي ستساعدك على البدء في بناء الخدمات المصغرة بلغة C#.



1. أساسيات بنية الخدمات المصغرة على .NET



الخدمات المصغرة هي نهج في التطوير يتم فيه تقسيم التطبيق إلى خدمات صغيرة ومستقلة، كل منها مسؤولة عن وظيفة أعمال محددة. في نظام .NET البيئي، يُستخدم ASP.NET Core لهذا الغرض - وهو إطار عمل خفيف الوزن ومتعدد المنصات.



المبادئ الأساسية للخدمات المصغرة بلغة C#:

  • استقلالية النشر — يمكن تحديث كل خدمة دون إيقاف الخدمات الأخرى.
  • الترابط الضعيف — تتواصل الخدمات عبر API (REST, gRPC) أو قوائم انتظار الرسائل.
  • قاعدة بيانات خاصة — تمتلك كل خدمة مصغرة بياناتها الخاصة (Database per Service).
  • تحمل الأخطاء — يجب ألا يؤدي تعطل خدمة واحدة إلى تعطيل النظام بأكمله.


لنبدأ بإنشاء خدمة مصغرة بسيطة بلغة C#. سنستخدم قالب ASP.NET Core Web API.



// إنشاء مشروع خدمة مصغرة جديدdotnet new webapi -n OrderServicecd OrderService

// مثال على وحدة تحكم بسيطة[ApiController][Route("api/[controller]")]public class OrdersController : ControllerBase{ private readonly IOrderRepository _repository;

public OrdersController(IOrderRepository repository) { _repository = repository; }

[HttpGet("{id}")] public async Task<IActionResult> GetOrder(int id) { var order = await _repository.GetByIdAsync(id); if (order == null) return NotFound(); return Ok(order); }

[HttpPost] public async Task<IActionResult> CreateOrder(OrderDto orderDto) { var order = new Order(orderDto.CustomerId, orderDto.TotalAmount); await _repository.AddAsync(order); return CreatedAtAction(nameof(GetOrder), new { id = order.Id }, order); }}


2. التواصل بين الخدمات: REST و gRPC وقوائم الانتظار



يجب أن تتواصل الخدمات المصغرة مع بعضها البعض. في .NET، تتوفر ثلاثة أساليب رئيسية:



REST API (HTTP)

الطريقة الأبسط والأكثر شيوعًا. استخدم HttpClient مع مصنع لإدارة الاتصالات بشكل صحيح.



// مثال على استدعاء خدمة مصغرة أخرى عبر HttpClientpublic class InventoryServiceClient{    private readonly HttpClient _httpClient;

public InventoryServiceClient(HttpClient httpClient) { _httpClient = httpClient; }

public async Task<bool> CheckStockAsync(int productId, int quantity) { var response = await _httpClient.GetAsync( $"/api/inventory/check?productId={productId}&quantity={quantity}"); return response.IsSuccessStatusCode; }}

// التسجيل في Program.csbuilder.Services.AddHttpClient<InventoryServiceClient>(client =>{ client.BaseAddress = new Uri("http://inventory-service:5001");});


gRPC

للاتصال المتزامن عالي الأداء، استخدم gRPC. يعتمد على HTTP/2 و Protocol Buffers.



// تعريف الخدمة في ملف .protosyntax = "proto3";

service OrderProcessor { rpc ProcessOrder (OrderRequest) returns (OrderResponse);}

message OrderRequest { int32 order_id = 1; string customer_email = 2;}

message OrderResponse { bool success = 1; string message = 2;}

// الجزء الخادم بلغة C#public class OrderProcessorService : OrderProcessor.OrderProcessorB

المدونات

توصيات الكتب