المستودع الواحد مع C#: تنظيم الكود للمبتدئين
في التطوير الحديث باستخدام C# (.NET)، عاجلاً أم آجلاً يطرح السؤال: كيف تنظم الكود عندما يكون لديك عدة مشاريع - مكتبة فئات، واجهة برمجة تطبيقات ويب، تطبيق وحدة تحكم، اختبارات؟ العديد من المطورين المبتدئين ينشئون مستودعات منفصلة لكل جزء، مما يؤدي إلى ارتباك في الإصدارات والتبعيات. البديل هو المستودع الواحد (monorepo). في هذه المقالة، سنشرح ما هو المستودع الواحد، وكيفية إعداده في C#، ولماذا يبسط الحياة للمبتدئين.
ما هو المستودع الواحد؟
المستودع الواحد هو نهج يتم فيه تخزين جميع أكواد عدة مشاريع مترابطة في مستودع Git واحد. على سبيل المثال، قد يكون لديك مكتبة مشتركة MyApp.Shared، وتطبيق ويب MyApp.Web، وأداة وحدة تحكم MyApp.Cli - كلها في مجلد واحد، مع ملف .sln واحد.
في سياق C# (.NET)، يعني المستودع الواحد عادةً حل Visual Studio واحد يحتوي على عدة مشاريع. هذا مفيد بشكل خاص لـ:
- مشاركة الكود (عبر مراجع المشاريع، وليس حزم NuGet).
- عملية بناء واحدة وCI/CD موحد.
- تبسيط العمل مع الإصدارات (فرع واحد - جميع التغييرات مرة واحدة).
مزايا المستودع الواحد للمبتدئين
إذا كنت قد بدأت للتو في تعلم C#، فإن المستودع الواحد سيساعدك على تجنب الأخطاء الشائعة:
- سهولة التنقل - جميع المشاريع في مكان واحد، لا حاجة للتبديل بين المستودعات.
- ارتباط فوري - التغيير في المكتبة يظهر فوراً في المشاريع التابعة.
- نمط موحد - يمكن إعداد ملف
.editorconfigواحد أوDirectory.Build.propsلجميع المشاريع. - سهولة تشغيل الاختبارات - بأمر واحد
dotnet testيتم اختبار الحل بأكمله.
إنشاء هيكل المستودع الواحد: دليل خطوة بخطوة
الخطوة 1. إنشاء المجلد الجذر والحل
افتح الطرفية ونفذ:
mkdir MyMonorepocd MyMonorepodotnet new sln -n MyAppالآن لديك ملف MyApp.sln - هذه هي نقطة الدخول لـ Visual Studio أو Rider.
الخطوة 2. إضافة المشاريع
لننشئ ثلاثة مشاريع: مكتبة فئات، واجهة برمجة تطبيقات ويب، وتطبيق وحدة تحكم. للراحة، سنضعها في مجلدات فرعية src:
mkdir srccd srcdotnet new classlib -n MyApp.Shareddotnet new webapi -n MyApp.Webdotnet new console -n MyApp.Clicd ..الآن سنربطها بالحل:
dotnet sln add src/MyApp.Shared/MyApp.Shared.csprojdotnet sln add src/MyApp.Web/MyApp.Web.csprojdotnet sln add src/MyApp.Cli/MyApp.Cli.csprojالخطوة 3. إعداد التبعيات بين المشاريع
لنفترض أن MyApp.Web و MyApp.Cli يستخدمان الفئات من MyApp.Shared. بدلاً من نشر المكتبة في NuGet، أضف مرجع المشروع ببساطة:
dotnet add src/MyApp.Web/MyApp.Web.csproj reference src/MyApp.Shared/MyApp.Shared.csprojdotnet add src/MyApp.Cli/MyApp.Cli.csproj reference src/MyApp.Shared/MyApp.Shared.csprojالآن في ملف MyApp.Web.csproj ستظهر قسم:
<ItemGroup> <ProjectReference Include="..\\MyApp.Shared\\MyApp.Shared.csproj" /></ItemGroup>الخطوة 4. كتابة الكود المشترك
في مشروع MyApp.Shared لننشئ فئة بسيطة:
// src/MyApp.Shared/GreetingService.csnamespace MyApp.Shared;
public class GreetingService{ public string GetGreeting(string name) => $"مرحباً، {name}! أهلاً بك في المستودع الواحد.";}الآن نستخدمها في تطبيق وحدة التحكم:
// src/MyApp.Cli/Program.csusing MyApp.Shared;