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

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

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

ابدأ الدورة

لماذا C# ليست مجرد لغة، بل كون كامل من الأدوات

\n

عندما يبدأ المطور في التعمق في عالم .NET، غالبًا ما يفكر: "C# رائعة، لكن ماذا يمكنني أن أفعل الآن؟" الإجابة بسيطة: استخدم المكتبات. النظام البيئي لـ C# غني جدًا لدرجة أنه يبدو أحيانًا أن هناك حلًا جاهزًا لأي مهمة على NuGet. وهذا رائع، لأن مكتبات C# الشائعة تتيح لك عدم إعادة اختراع العجلة، بل التركيز على منطق الأعمال.

\n

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

\n\n

التسجيل: Serilog ضد NLog - معركة العمالقة

\n

التسجيل هو أول شيء يجب التفكير فيه. بدون السجلات، أنت أعمى. مكتبة Serilog أصبحت المعيار الفعلي في عالم .NET. لماذا؟ لأنها تستطيع إرسال السجلات إلى أي مكان: ملف، وحدة تحكم، Elasticsearch، قاعدة بيانات. وكل ذلك بأقل إعدادات.

\n

مثال: إعداد Serilog في ASP.NET Core

\n
using Serilog;\n\nLog.Logger = new LoggerConfiguration()\n    .WriteTo.Console()\n    .WriteTo.File("logs/myapp-.txt", rollingInterval: RollingInterval.Day)\n    .CreateLogger();\n\nvar builder = WebApplication.CreateBuilder(args);\nbuilder.Host.UseSerilog();\n\nvar app = builder.Build();\napp.MapGet("/", () => "Hello World!");\napp.Run();
\n

NLog هو أيضًا أداة قوية، لكنها تتطلب تكوينًا أكثر في XML. إذا كنت تريد البساطة والسرعة - اختر Serilog. إذا كنت بحاجة إلى تحكم كامل - فاستخدم NLog. لكن بالنسبة لـ 90% من المشاريع، سيكون Serilog الخيار الأمثل.

\n\n

Entity Framework Core: ORM لا داعي للخوف منه

\n

العمل مع قواعد البيانات هو ألم كل مطور. مكتبات C# للعمل مع قواعد البيانات تنقسم إلى معسكرين: ORM الثقيلة (Entity Framework) والخفيفة (Dapper). Entity Framework Core (EF Core) هو أداة قوية تولّد SQL نيابة عنك. إنه مثالي لنماذج المجال المعقدة.

\n

مثال: عمليات CRUD بسيطة مع EF Core

\n
public class User\n{\n    public int Id { get; set; }\n    public string Name { get; set; }\n}\n\npublic class AppDbContext : DbContext\n{\n    public DbSet<User> Users { get; set; }\n}\n\n// الاستخدام\nusing var db = new AppDbContext();\nvar user = new User { Name = "أليكسي" };\ndb.Users.Add(user);\ndb.SaveChanges();
\n

لكن هناك فارق: EF Core قد يكون بطيئًا في الاستعلامات المعقدة. بالنسبة للأنظمة عالية التحميل، من الأفضل استخدام Dapper - وهو ORM صغير يعمل أسرع بعدة مرات، لكنه يتطلب كتابة SQL يدويًا.

\n

متى تختار Dapper؟

\n
    \n
  • تحتاج إلى أقصى أداء
  • \n
  • لديك استعلامات بسيطة (CRUD بدون منطق معقد)
  • \n
  • لا تخاف من SQL
  • \n
\n
using var connection = new SqlConnection(connectionString);\nvar users = connection.Query<User>("SELECT * FROM Users WHERE IsActive = @Active", new { Active = true });
\n\n

AutoMapper: التعيين بدون ألم

\n

إذا كنت تكتب بلغة C#، فستواجه باستمرار تحويل كائن إلى آخر. DTO ← Entity، Entity ← ViewModel. التعيين اليدوي ممل وعرضة للأخطاء. AutoMapper يؤتمت هذه العملية.

\n

مثال: إعداد ملف تعريف

\n
public class UserProfile : Profile\n{\n    public UserProfile()\n    {\n        CreateMap<User, UserDto>()\n            .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => $"{src.FirstName} {src.LastName}"));\n    }\n}\n\n// الاستخدام\nvar config = new MapperConfiguration(cfg => cfg.AddProfile<UserProfile>());\nvar mapper = config.CreateMapper();\nvar dto = mapper.Map<UserDto>(user);
\n

نصيحة: لا تفرط في استخدام AutoMapper. إذا كان التعيين

المدونات

توصيات الكتب