مراجعة حالة التعليمات البرمجية 1

لقد عملت في شركة تفتقر إلى ممارسة مراجعة التعليمات البرمجية. من أجل تحسين الذات وتوسيع آفاقي ، أود أن أتلقى القليل من النقد البناء.

الآن أقترح تحليل الحالة المتكررة مع وفرة من الفروع.

المهمة


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

إذا قام المستخدم بالسحب والإفلات من مجلد إلى مجلد وكان مجلد آخر في قسم مختلف ، فتحقق من إمكانية النسخ. إذا كان بإمكانك النسخ ، فقم بالنسخ. خلاف ذلك ، إعطاء رسالة لا يمكنك نسخها. لا يمكن نسخه لأسباب: لا يوجد إذن الكتابة ؛ لا توجد مساحة كافية نظام الملفات لا يدعم الأحرف في الاسم ؛ سيكون اسم الملف في المجلد الوجهة مسارًا طويلاً جدًا ؛ يوجد بالفعل ملف بنفس الاسم في المجلد (افتح مربع حوار للكتابة فوق الملف ، إذا وافق المستخدم ، ثم الكتابة فوقه).

إذا كان المجلد الوجهة على نفس القسم مثل الملف ، فقم بنقل الملف. غير قادر على النقل: لا أذونات الكتابة ؛ سيكون مسار الوجهة الكاملة طويلاً جدًا ، يوجد بالفعل ملف بنفس الاسم في المجلد (افتح مربع حوار) ؛ الملف هو نظام ولا يمكن حذفه ؛ يوجد بالفعل ملف بهذا الاسم (افتح مربع حوار للكتابة فوق الملف ، إذا وافق المستخدم ، ثم الكتابة فوقه).

إذا قام المستخدم بنقل الملف إلى نافذة أخرى ، ولكن له نفس المسار ، فقم بإنشاء نسخة من الملف (أضف "نسخ #" إلى الاسم ، حيث # هو أصغر رقم موجب يجعل الملف فريدًا). غير قادر على إنشاء نسخة: لا أذونات الكتابة ؛ المسار الكامل طويل جدًا ؛ مساحة حرة غير كافية.

إذا قام المستخدم بالانتقال باستخدام الزر الأيمن ، فاتصل بمربع الحوار لتحديد الإجراء (نسخ / نقل / إنشاء اختصار / إنشاء نسخة).

إذا قام المستخدم بتحرير الملف في نفس النافذة (تلف الملف) باستخدام الزر الأيسر ، فلا تفعل شيئًا. وإذا كان ذلك صحيحًا ، فاقترح إنشاء نسخة أو اختصار. إذا لم يقع الملف في نافذة المجلد ، فلا تفعل شيئًا.

بمرور الوقت ، قد تظهر شروط جديدة ، قد تتغير الإجراءات الجديدة ، الشروط التي سبق وصفها لتغيير الإجراءات.

حل المناقشة


أقدم حلاي المثير للجدل في جافا ، حيث وصلت إلى ثاني أعلى مستوى من التعشيش إذا:

public static void dispatchFileDropping( FileDragNDropEvent event ) { //------------------------------------------------------ //   // (     ). boolean A = isTargetPlaceIsDirectoryWindow(event); boolean B = isTargetDirEqualsSourceDir(event); boolean C = isTargetVolumeEqualsSourceVolume(event); boolean D = isMouseRightButtonUsed(event); boolean E = isSystemFileDroped(event); boolean F = isTargetVolumeHasFreeSpace(event); boolean G = isTargetDirWritable(event); boolean H = isSourceDirCleanable(event); boolean I = isFileNameOkForTarget(event); boolean J = isNewFileFullPathOkForTargetLimit(event); boolean K = isTargetDirHasSameNamedFile(event); boolean L = isTargetDirSameNamedFileIsWritable(event); Actions userChoise = (A & D) ? askUserForAction(event) : null; if (userChoise == Actions.CANCEL) return; boolean M = (userChoise == Actions.COPY); boolean N = (userChoise == Actions.CLONE); boolean O = (userChoise == Actions.MOVE); boolean P = (userChoise == Actions.LINK); //------------------------------------------------------ //      . boolean copyCase = (M & !K) | (A & !B & !C & !D & !K); boolean copyRewriteCase = (M & K) | (A & !B & !C & !D & K); boolean cloneCase = N | (A & B & !D); boolean moveCase = (O & !K) | (A & !B & C & !D & !K); boolean moveRewriteCase = (O & K) | (A & !B & C & !D & K); boolean createLinkCase = P; //------------------------------------------------------ //      //  . if (copyRewriteCase | moveRewriteCase) { if (askUserWantToRewrite() == Answers.NO) return; } //------------------------------------------------------ //     . boolean isPossibleToCopy = F & G & I & J; boolean isPossibleToCopyRewrite = isPossibleToCopy & L; boolean isPossibleToClone = isPossibleToCopy; boolean isPossibleToMove = isPossibleToCopy & !E & H; boolean isPossibleToMoveRewrite = isPossibleToMove & L; boolean isPossibleToLink = isPossibleToCopy & !K; //------------------------------------------------------ //   ,  , //    . String errorMessage = ""; if (copyCase & !isPossibleToCopy) { errorMessage = "  ."; } else if (copyRewriteCase & !isPossibleToCopyRewrite) { errorMessage = "  ."; } else if (cloneCase & !isPossibleToClone) { errorMessage = "  ."; } else if (moveCase & !isPossibleToMove) { errorMessage = "  ."; } else if (moveRewriteCase & !isPossibleToMoveRewrite) { errorMessage = "    ."; } else if (createLinkCase & !isPossibleToLink) { errorMessage = "  ."; } String reasons = " : \n"; if (!F) { reasons += "--     \n"; } if (!G) { reasons += "--        \n"; } if (!I) { reasons += "--      \n"; } if (!J) { reasons += "--       \n"; } if (moveCase | moveRewriteCase) { if (E) { reasons += "--     \n"; } if (!H) { reasons += "--       \n"; } } else if (copyRewriteCase | moveRewriteCase) { if (!L) { reasons += "--      \n"; } } else if (createLinkCase) { if (K) { reasons += "--       \n"; } } if (errorMessage.isEmpty()) { if (copyCase) copy(event); if (copyRewriteCase) copyRewrite(event); if (cloneCase) clone(event); if (moveCase) move(event); if (moveRewriteCase) moveRewrite(event); if (createLinkCase) createLink(event); } else { showMessage(errorMessage + reasons); } } 

Source: https://habr.com/ru/post/ar417903/


All Articles