C# में कोड रिव्यू: क्या जाँचें और व्यवहार में फीडबैक कैसे दें
\n\nCode review सिर्फ पुल-रिक्वेस्ट मर्ज करने से पहले की एक औपचारिक प्रक्रिया नहीं है। यह कोड की गुणवत्ता बढ़ाने, टीम में ज्ञान फैलाने और बग्स को रोकने का एक शक्तिशाली उपकरण है। यह विशेष रूप से C# और .NET इकोसिस्टम के लिए प्रासंगिक है, जहाँ मेमोरी प्रबंधन और एसिंक्रोनसी से लेकर सख्त टाइपिंग और LINQ तक कई बारीकियाँ हैं।
\n\nइस लेख में, हम विस्तार से चर्चा करेंगे कि C# कोड की समीक्षा करते समय विशेष रूप से किन बातों पर ध्यान देना चाहिए, और फीडबैक कैसे दें ताकि लोग आपकी सुनें, न कि आपसे नफरत करें।
\n\n1. आर्किटेक्चर और लॉजिक: "हम यह क्यों कर रहे हैं?"
\n\nफ़ॉर्मेटिंग और वेरिएबल के नाम देखने से पहले, सुनिश्चित करें कि हल की जा रही समस्या का कोई मतलब है। यह सबसे महत्वपूर्ण चरण है, जिसे अक्सर छोड़ दिया जाता है।
\n\n- \n
- आवश्यकताओं का अनुपालन: क्या कोड टिकट में वर्णित व्यावसायिक समस्या का समाधान करता है? क्या कोई अनावश्यक कार्यक्षमता है (YAGNI)? \n
- SOLID सिद्धांतों का उल्लंघन: क्या क्लास "गॉड ऑब्जेक्ट" में बदल गया है? क्या जिम्मेदारियों का स्पष्ट विभाजन है? उदाहरण के लिए, क्या बिज़नेस लॉजिक डेटा एक्सेस लॉजिक के साथ मिश्रित हो रहा है? \n
- अत्यधिक जटिलता: क्या समस्या को सरल तरीके से हल किया जा सकता है? कभी-कभी डेवलपर्स जटिल पैटर्न लिखते हैं जहाँ सामान्य
if-elseया एक सरल लूप पर्याप्त होता है। \n
// ❌ खराब: क्लास बहुत अधिक काम करता है\npublic class UserService\n{\n public void RegisterUser(string email, string password)\n {\n // वैलिडेशन\n if (!email.Contains("@"))\n throw new Exception("Invalid email");\n\n // पासवर्ड हैशिंग\n var hash = BCrypt.HashPassword(password);\n\n // डेटाबेस में सेव करना\n using var db = new AppDbContext();\n db.Users.Add(new User { Email = email, PasswordHash = hash });\n db.SaveChanges();\n\n // ईमेल भेजना\n SmtpClient.Send("welcome@site.com", email, "Welcome!");\n }\n}\n\n// ✅ अच्छा: लेयर्स में विभाजन (SRP)\npublic class UserRegistrationService\n{\n private readonly IUserRepository _repository;\n private readonly IEmailService _emailService;\n\n public UserRegistrationService(IUserRepository repository, IEmailService emailService)\n {\n _repository = repository;\n _emailService = emailService;\n }\n\n public async Task<Result> RegisterAsync(string email, string password)\n {\n if (!EmailValidator.IsValid(email))\n return Result.Failure("Invalid email");\n\n var user = User.Create(email, password);\n await _repository.AddAsync(user);\n await _emailService.SendWelcomeAsync(email);\n\n return Result.Success();\n }\n}\n\n2. प्रदर्शन और सुरक्षा: "क्या यह सर्वर को मार डालेगा?"
\n\n.NET एक शक्तिशाली फ्रेमवर्क है, लेकिन इसका गलत उपयोग करना आसान है। प्रत्येक रिव्यू में यह जाँचना आवश्यक है।
\n\n- \n
- एसिंक्रोनसी (async/await): क्या एसिंक्रोनस कोड में कोई ब्लॉकिंग कॉल (
.Result,.Wait()) है? यह प्रदर्शन को खत्म कर देता है। लाइब्रेरीज़ मेंConfigureAwait(false)का उपयोग करें। \n - मेमोरी लीक: क्या
IDisposableसंसाधनों को मुक्त करना भूल गए हैं? क्याStream,SqlConnectionआदि के लिएusingका उपयोग किया गया है? \n - SQL इंजेक्शन: क्या क्वेरीज़ स्ट्रिंग कॉन्केटनेशन के माध्यम से बनाई गई हैं? आधुनिक C# में Entity Framework या Dapper के साथ यह दुर्लभ है, लेकिन जाँच अनिवार्य है। \n
- LINQ और कलेक्शन: क्या एक ही कलेक्शन पर कई बार लूप किया गया है? क्या तत्वों की उपस्थिति जाँचने के लिए
Count() > 0के बजायAny()का उपयोग किया गया है? \n
// ❌ खराब: ब्लॉकिंग कॉल और कई बार लूप\nvar task = GetDataAsync();\nvar data = task.Result; // थ्रेड को ब्लॉक करना!\n\nif (data.Count() > 0) // पहला लूप