سؤال

لقد ورثت هذا العملاق إرث جافا ويب التطبيق باستخدام الدعامات 1.2.4.لدي سؤال محدد فيما يتعلق بالإجراءات.معظم الصفحات بالضبط عمل واحد ، processExecute() الأساليب البشعة الوحوش (طويلة جدا و طن من عبارات if المتداخلة بناء على طلب المعلمات).

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

  1. هذا هو الاتجاه الصحيح ؟
  2. هل هناك خطوة وسيطة أنا يمكن أن تتخذ ، وهو النمط الذي يتعامل مع الفوضى داخل متجانسة الإجراءات ؟ ربما أمر آخر نمط داخل العمل ؟
هل كانت مفيدة؟

المحلول

طريقتي في التعامل مع هذا ليكون:

  • لا تفعل كل شيء في وقت واحد'
  • كلما قمت بتغيير أي شيء ، وترك ذلك أفضل مما كنت وجدت
    • استبدال الشرطية منفصلة مع عمل تطبيقات خطوة واحدة.
    • والأفضل من ذلك:جعل الخاص بك تطبيقات منفصلة من عمل الطبقات بحيث يمكنك استخدامه عند تغيير الأطر
    • إبقاء القيادة الجديدة تنفيذ تماما دون الإشارة إلى الدعامات ، واستخدام إجراءات جديدة كما التفاف حول هذه التطبيقات.
    • قد تحتاج إلى توفير واجهات الخاص بك الدعامات ActionForms من أجل تمرير حول لهم دون نسخ جميع البيانات.من ناحية أخرى - قد ترغب في تمرير حول الكائنات الأخرى من ActionForms التي عادة ما تكون مجموعة من السلاسل (انظر سؤالك الآخر عن الدعامات 1.2 ActionForms)
  • بدء ترحيل أجزاء أحدث وأفضل التكنولوجيا.الدعامات 1.2 كانت كبيرة عندما خرج, ولكن بالتأكيد ليس ما تريد أن الدعم في الأبدية.هناك بعض الأجيال من أطر أفضل الآن.

هناك بالتأكيد أكثر من ذلك - آسف ، نفاد الوقت هنا...

نصائح أخرى

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

أنصح البقاء بعيدا من الميراث مع عمل الطبقات.يبدو مثل فكرة جيدة في البداية لكن أعتقد إن عاجلا أو آجلا كنت أدرك أن كنت الحذاء يتدخل الأمور أكثر مما كنت في الواقع مما يجعل رمز قاعدة قوية.الدعامات لديه ما يكفي من قاعدة الإجراءات كما هو, إذا كنت إنشاء أخرى جديدة ربما كنت قد حصلت على رمز في طبقة الويب التي لا ينبغي أن يكون هناك.

هذا هو مجرد تجربتي الشخصية.

لقد تعاملت مع هذا النوع من الشيء قبل.هو خطوة أولى جيدة إلى إدراج فئة أساسية أخرى في سلسلة الميراث بين العمل و واحد من الأصلي وحشية عمل الطبقات (دعونا نسميها ClassA).لا سيما إذا لم يكن لديك الوقت للقيام بكل شيء في وقت واحد.ثم يمكنك البدء في سحب قطعة من وظيفة إلى أصغر إجراءات موازية الطبقات (ClassB, ClassC).أي أن المشترك بين الأصل ClassA الجديد ريفاكتوريد الطبقات يمكن سحب ما يصل إلى الفئة الأساسية.وبالتالي فإن التسلسل الهرمي الآن يبدو مثل هذا:

Original Hierarchy:      New Hierarchy:

     Action                   Action
       |                        |
       |                      BaseA
  (old)ClassA                   |
                       +--------+----------+
                       |        |          |
                   ClassB (new)ClassA   ClassC
  1. تذهب أسلوب واحد في وقت واحد
  2. سجل بعض حالات الاختبار يمكنك أن تلعب مرة أخرى في وقت لاحق. على سبيل المثال هنا (تأكد من ضرب العديد من المسارات من خلال الكود كما يمكنك ، أيكل لفتات المستخدم على الصفحة أن نسمي هذا العمل)
  3. ريفاكتور طريقة للحد من تعقيدها من خلال خلق أصغر الأساليب التي تفعل الأشياء الصغيرة.
  4. إعادة تشغيل الاختبارات كما كنت تفعل هذا

عند هذه النقطة لديك ريفاكتوريد نسخة كبيرة ضخمة مزعج طريقة. الآن في الواقع يمكنك البدء في إنشاء إجراءات محددة.

يمكنك استخدام الخاص بك حديثا ريفاكتوريد الدرجة قاعدة الطبقة ، و تنفيذ كل إجراءات محددة وفئة فرعية باستخدام تلك ريفاكتوريد صغيرة الأساليب.

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

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

صعبة المشكلة ولكن نموذجية من أوائل ويب تطوير التطبيق.

أول شيء كنت بحاجة للبدء في التفكير في المنطق الذي يشكل السلوك التجاري ، والتي المنطق يشكل "تدفق" (أيما يراه المستخدم) ، والتي المنطق يحصل مضمون ما يراه.

لم يكن لديك للذهاب إلى أسفل الطريق من المصانع و واجهات و كل ذلك ؛ التنفيذ بأثر رجعي أقل فائدة...ولكن ترسيخ منطق الأعمال و استرجاع البيانات المنطق إلى مندوبين من نوع ما...وترك الدعامات الإجراءات لتحديد تدفق الصفحة على أساس نجاح/فشل هذا المنطق.

من هناك عليك أن تأخذ بضعة أسابيع و طحن بها

واحد طويل الأسلوب أبدا لم تكن جيدة, إلا أنه يحدث أن تكون واحدة بيان التبديل فيها حالات قصيرة جدا (رمز تحليل أو شيء من هذا القبيل).

هل يمكن على الأقل ريفاكتور طويلة الأسلوب إلى أصغر الأساليب مع أسماء وصفية.

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

enum Operation {
  ADD, DELETE;
}

...

Operation operation = determineOperation(form);
if (operation == Operation.DELETE) { 
  doDelete(form); 
} else if (operation == Operation.ADD) {
  doAdd(form);
}

إذا كنت يمكن أن تذهب بعيدا أن يكون لديك منطق جميلة ونظيفة يمكنك أن تفعل ما بيع ديون تريد.

الجزء الصعب هو الحصول على منطق واضح, ويمكنك أن تفعل ذلك في الخطوات التالية.لا اختيار نمط حتى أنك تفهم بالضبط ما هي مشكلتك.

إذا كنت تخطط ريفاكتور مدونة يجب عليك التأكد من كتابة الاختبارات البرمجية الموجودة أولا حتى يمكنك أن تكون متأكدا من أنك لم تتغير وظائف أنه بمجرد البدء في إعادة بيع ديون.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top