لماذا C# ليست مجرد لغة، بل كون كامل من الأدوات
\nعندما يبدأ المطور في التعمق في عالم .NET، غالبًا ما يفكر: "C# رائعة، لكن ماذا يمكنني أن أفعل الآن؟" الإجابة بسيطة: استخدم المكتبات. النظام البيئي لـ C# غني جدًا لدرجة أنه يبدو أحيانًا أن هناك حلًا جاهزًا لأي مهمة على NuGet. وهذا رائع، لأن مكتبات C# الشائعة تتيح لك عدم إعادة اختراع العجلة، بل التركيز على منطق الأعمال.
\nفي هذه المقالة، سنستعرض النظام البيئي لمكتبات .NET التي يحتاجها كل مطور حقًا. لن نكتفي بسرد الأسماء - سأعرض أمثلة على الكود، وأشرح أين تستخدم كل منها، وأقدم نصائح عملية. هيا بنا!
\n\nالتسجيل: Serilog ضد NLog - معركة العمالقة
\nالتسجيل هو أول شيء يجب التفكير فيه. بدون السجلات، أنت أعمى. مكتبة Serilog أصبحت المعيار الفعلي في عالم .NET. لماذا؟ لأنها تستطيع إرسال السجلات إلى أي مكان: ملف، وحدة تحكم، Elasticsearch، قاعدة بيانات. وكل ذلك بأقل إعدادات.
\nمثال: إعداد Serilog في ASP.NET Core
\nusing 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();\nNLog هو أيضًا أداة قوية، لكنها تتطلب تكوينًا أكثر في XML. إذا كنت تريد البساطة والسرعة - اختر Serilog. إذا كنت بحاجة إلى تحكم كامل - فاستخدم NLog. لكن بالنسبة لـ 90% من المشاريع، سيكون Serilog الخيار الأمثل.
\n\nEntity Framework Core: ORM لا داعي للخوف منه
\nالعمل مع قواعد البيانات هو ألم كل مطور. مكتبات C# للعمل مع قواعد البيانات تنقسم إلى معسكرين: ORM الثقيلة (Entity Framework) والخفيفة (Dapper). Entity Framework Core (EF Core) هو أداة قوية تولّد SQL نيابة عنك. إنه مثالي لنماذج المجال المعقدة.
\nمثال: عمليات CRUD بسيطة مع EF Core
\npublic 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
using var connection = new SqlConnection(connectionString);\nvar users = connection.Query<User>("SELECT * FROM Users WHERE IsActive = @Active", new { Active = true });\n\nAutoMapper: التعيين بدون ألم
\nإذا كنت تكتب بلغة C#، فستواجه باستمرار تحويل كائن إلى آخر. DTO ← Entity، Entity ← ViewModel. التعيين اليدوي ممل وعرضة للأخطاء. AutoMapper يؤتمت هذه العملية.
\nمثال: إعداد ملف تعريف
\npublic 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. إذا كان التعيين