مراجعة كود Java: ما يبحث عنه كبار المطورين وكيف لا تفشل في مراجعة الكود

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

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

ابدأ الدورة

مراجعة كود Java: ما يبحث عنه كبار المطورين وكيف لا تفشل في مراجعة الكود



لقد كتبت الكود، واختبرته محليًا، وشغّلت الاختبارات — كل شيء أخضر. تفتح Pull Request وبعد ساعتين ترى عشرة تعليقات من زميل كبير. مألوف؟ مراجعة كود Java ليست إجراءً بيروقراطيًا، بل هي امتحان حقيقي لنضج المطور. كبار المطورين يرون الكود بشكل مختلف: فهم لا يتحققون فقط مما إذا كان يعمل، بل ينظرون إلى كم من الوقت سيعمل وكم سيكون صعبًا تغييره.



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



1. تجاهل مبادئ SOLID والهندسة النظيفة



هذه هي أكثر ملاحظة شائعة من كبار المطورين. عندما تكتب دالة بطول 200 سطر أو كلاس يفعل كل شيء — فهذا يلفت الانتباه فورًا. الكبير لن يضيع وقتًا في تحليل هذا الكود، بل سيطلب ببساطة تقسيمه.



مثال على كود سيء:



public class OrderService {    public void processOrder(Order order) {        // 1. التحقق        if (order.getItems().isEmpty()) {            throw new IllegalArgumentException("Order must have items");        }        // 2. التحقق من المستخدم        User user = userRepository.findById(order.getUserId());        if (user == null || user.isBlocked()) {            throw new SecurityException("User not valid");        }        // 3. حساب الخصم        double discount = 0;        if (order.getTotal() > 1000) {            discount = 0.1;        }        // 4. الحفظ        order.setDiscount(discount);        orderRepository.save(order);        // 5. إرسال البريد الإلكتروني        emailService.sendOrderConfirmation(order);    }}


ما سيقوله الكبير: «هذه الدالة تنتهك مبدأ المسؤولية الواحدة. إنها مسؤولة عن التحقق، الحساب، الحفظ، وإرسال الإشعارات. قسّمها إلى دوال منفصلة أو انقلها إلى خدمات مختلفة.»



كيفية الإصلاح:



public class OrderService {    private final OrderValidator validator;    private final DiscountCalculator discountCalculator;    private final OrderRepository orderRepository;    private final NotificationService notificationService;

public void processOrder(Order order) { validator.validate(order); double discount = discountCalculator.calculate(order); order.setDiscount(discount); orderRepository.save(order); notificationService.sendOrderConfirmation(order); }}


في تطوير Java، مبدأ المسؤولية الواحدة هو الأساس. إذا رأيت في الدالة كلمة «و» (تحقق واحفظ وأرسل)، فهذا يعني أن الوقت قد حان لإعادة الهيكلة.



2. التعامل مع null و NPE (NullPointerException)



NullPointerException — آفة مطوري Java. كبار المطورين يكرهون NPE غير المتوقعة وينتبهون دائمًا لكيفية تعاملك مع null. الملاحظة النموذجية: «ماذا سيحدث إذا أعادت الدالة null؟»



مثال:



public String getUserEmail(Long userId) {    User user = userRepository.findById(userId);    return user.getEmail().toLowerCase();}


ملاحظة الكبير: «إذا لم يتم العثور على المستخدم، سيكون user مساويًا لـ null — سنحصل على NPE. استخدم Optional أو على الأقل تحقق.»



النسخة المصححة:



public String getUserEmail(Long userId) {    return userRepository.findById(userId)            .map(User::getEmail)            .map(String::toLowerCase)            .orElseThrow(() -> new UserNotFoundException("User not found: " + userId));}


استخدام Optional هو المعيار في Java الحديثة.

المدونات

توصيات الكتب