المصدر المفتوح بلغة C#: أفضل مستودعات GitHub لمطور .NET
\n\nعندما نتحدث عن المصدر المفتوح، أول ما يتبادر إلى الذهن هو Python أو JavaScript أو Go. لكن C#؟ يعتقد الكثيرون خطأً أن نظام .NET البيئي مغلق ومملوك. في الواقع، المصدر المفتوح بلغة C# يزدهر، وGitHub مليء حرفيًا بمشاريع مذهلة. من الأطر القوية إلى الأدوات المساعدة الأنيقة، هناك كل ما يلهم حتى أكثر المطورين خبرة.
\n\nفي هذه المقالة، لن نقوم فقط بسرد الروابط. سنقوم بتحليل أفضل مستودعات GitHub بلغة C# مع أمثلة حقيقية للشفرات البرمجية، ونوضح كيفية استخدامها، ونشرح لماذا يستحق كل منها اهتمامك. إذا كنت تكتب بلغة C# أو بدأت للتو في الغوص في عالم .NET، فهذه المادة من أجلك.
\n\nلماذا يجب دراسة مشاريع المصدر المفتوح بلغة C#؟
\n\nالعمل مع شفرة الآخرين هو أفضل طريقة لصقل المهارات. ترى كيف يتم حل المشكلات الحقيقية، وما هي الأنماط المستخدمة، وكيف يتم تحسين الأداء. بالإضافة إلى ذلك، مستودعات C# على GitHub هي كنز من الحلول الجاهزة. لماذا إعادة اختراع العجلة بينما يمكنك استخدام مكتبة موثوقة؟
\n\nدعنا نغوص في أفضل المشاريع. لقد اخترت 7 مستودعات تغير قواعد اللعبة حقًا.
\n\n1. Humanizer — تحويل الشفرة إلى لغة بشرية
\n\nهل سبق لك أن كتبت: DateTime.Now.AddDays(-3).ToShortDateString() وفكرت: "كيف يمكنني جعل هذا أجمل؟" Humanizer هي مكتبة تفعل ذلك بالضبط. إنها تحول الأرقام والتواريخ والتعدادات وحتى البايتات إلى سلاسل نصية قابلة للقراءة.
إليك كيف يبدو ذلك في الشفرة:
\n\nusing Humanizer;\n\nint number = 1234567;\nConsole.WriteLine(number.ToWords()); // واحد مليون ومئتان وأربعة وثلاثون ألفًا وخمسمئة وسبعة وستون\n\nDateTime birthday = new DateTime(1990, 5, 15);\nConsole.WriteLine(birthday.Humanize()); // منذ 34 عامًا\n\nTimeSpan time = TimeSpan.FromDays(3).Add(TimeSpan.FromHours(5));\nConsole.WriteLine(time.Humanize()); // 3 أيام و5 ساعات\n\nيستخدم آلاف الشركات مشروع المصدر المفتوح هذا بلغة C# في بيئات الإنتاج. إنه مثالي لتسجيل الأحداث والواجهات والتقارير. المستودع: github.com/Humanizr/Humanizer.
2. FluentValidation — قواعد تحقق أنيقة
\n\nالتحقق من صحة البيانات هو صداع لكل مطور خلفية. FluentValidation يحل هذه المشكلة بأناقة: تصف القواعد في شكل سلسلة fluent بدلاً من توزيع عمليات التحقق في جميع أنحاء الشفرة.
\n\nمثال:
\n\npublic class UserValidator : AbstractValidator<User>\n{\n public UserValidator()\n {\n RuleFor(user => user.Name)\n .NotEmpty().WithMessage("الاسم مطلوب")\n .Length(2, 50).WithMessage("يجب أن يكون الاسم من 2 إلى 50 حرفًا");\n\n RuleFor(user => user.Email)\n .EmailAddress().WithMessage("البريد الإلكتروني غير صحيح");\n\n RuleFor(user => user.Age)\n .InclusiveBetween(18, 120).WithMessage("يجب أن يكون العمر بين 18 و120 عامًا");\n }\n}\n\n// الاستخدام:\nvar validator = new UserValidator();\nvar result = validator.Validate(new User { Name = "أ", Email = "test", Age = 15 });\n\nif (!result.IsValid)\n{\n foreach (var error in result.Errors)\n Console.WriteLine(error.ErrorMessage);\n}\n\nهذا واحد من أشهر مستودعات C# على GitHub بأكثر من 10,000 نجمة. يتكامل مع ASP.NET Core ويجعل الشفرة أنظف.
\n\n3. Polly — مقاومة الأخطاء دون ألم
\n\nهل يتعطل تطبيقك عند عدم توفر قاعدة البيانات؟ Polly هي مكتبة للتعامل مع الأعطال باستخدام محاولات إعادة المحاولة والمهلات وقواطع الدائرة. إنها تنقذ الخدمات المصغرة من الأعطال المتتالية.
\n\nمثال حقيقي:
\n\nusing Polly;\n\nvar retryPolicy = Policy\n .Handle<HttpRequestException>()\n .WaitAndRetryAsync(3, r