مستقبل الـ .NET بعد ظهور AI APIs — هل لسه هنكتب Controllers؟
بص يا جماعة… إحنا دخلين على مرحلة جديدة في عالم الـ .NET.
مرحلة ممكن فيها فعلاً إن الـ Controller اللي إحنا حافظينه من أيام الـ MVC يبقى مجرد واجهة سطحية فوق “مخ ذكي” بيكتب الكويري وينفذ القرار بنفسه 😅.
💡 زمان كنا بنشتغل إزاي؟
-
نعمل Web API عادي:
-
Controller فيه Actions زي
GetAll(),GetById(),Create() -
Queries مكتوبة بـ LINQ
-
Logic كله Manual، خطوة بخطوة
-
-
الكود كله كان علينا: نكتب كل شيء بنفسنا، من الاستقبال للـ Response
🚀 دلوقتي، لما تدخل AI APIs
مع أدوات زي:
-
Azure OpenAI Service
-
Semantic Kernel (من مايكروسوفت نفسها)
-
.NET 9 AI SDK
بقى عندنا طبقة جديدة جوه الـ Backend اسمها AI Orchestrator.
🔍 يعني إيه AI Orchestrator؟
تقدر تعتبره المخ اللي بيفكر مكانك:
-
بيفهم Intent المستخدم
-
يقرر يستدعي أي كود أو أي داتا
-
يحوّل الكلام الطبيعي (عربي أو إنجليزي) لعملية فعلية على الكود
مثال:
بدل ما المستخدم يبعث:
GET /api/orders?status=shipped&date=2025-10-01
هو ممكن يكتب ببساطة:
"هاتلي كل الأوردرات اللي اتشحنِت في أكتوبر"
الـ Controller دلوقتي:
-
يستقبل النص
-
يبعته لل Semantic Kernel
-
الـ Kernel يستدعي Azure OpenAI model (GPT-4 أو GPT-4o)
-
الموديل يحدد الـ Query المطلوبة ويشغل Method جوه كودك:
var orders = await _orderRepo.GetShippedOrdersSince(new DateTime(2025,10,1));
-
النتيجة ترجع للمستخدم كأنها سحر 🤯
🧠 التقنية وازاي ده بيشتغل
-
Semantic Kernel فيه حاجة اسمها Plugins أو Skills
-
دي Methods موجودة في كودك بتتسجل كـ Functions
-
لما الموديل يقرر يستدعي Function، بيرجع JSON زي:
-
{
"function_call": {
"name": "GetShippedOrdersSince",
"arguments": { "date": "2025-10-01" }
}
}
-
الـ Kernel بينفذها فعليًا جوه الكود
-
ممكن تضيف Memory عشان الـ Agent يفتكر السياق
-
ممكن تستخدم Vector Store زي Azure AI Search لعمل RAG (Retrieval-Augmented Generation)
-
يعني يجيب البيانات من Docs أو DB ويضيفها للـ prompt قبل الرد
-
⚙️ دور الـ Controller دلوقتي
لسه موجود، بس دوره مختلف:
-
يتحكم في Auth و Rate Limiting
-
يمرر الـ Context (المستخدم، الجلسة، اللغة)
-
يوجّه الـ Request للـ Kernel بدل ما ينفذ الـ Logic بنفسه
مثال:
بدل ما Controller ينفذ:
return _orderService.GetOrders();
هيعمل:
return await _semanticKernel.RunAsync("هات الأوردرات اللي اتشحنِت");
🔥 الخلاصة
-
دخلنا مرحلة جديدة: مش بنكتب Business Logic سطر بسطر
-
بنبني نظام يفكر في المنطق ويقرر أي كود يشغّل
-
.NET 9 هيدعم رسميًا AI SDK
-
Semantic Kernel يدعم OpenAI, Azure OpenAI, HuggingFace, Ollama
-
Function Calling و RAG pipelines بقت سهلة جدًا
💬 في الآخر:
-
الـ Controller مش هيموت… بس هيبطل “يفكر”
-
هيبقى مجرد جسر بين المستخدم والمخ الذكي جوه الـ Backend
👨💻 السؤال:
أنت جاهز تدخل المرحلة دي؟ ولا لسه بتكتب Controllers بـ GetAll و GetById؟ 😄