مستودع واحد مع C#: تنظيم الكود للمبتدئين

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

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

ابدأ الدورة

المستودع الواحد مع 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;                

المدونات

توصيات الكتب