سؤال

لدي مشكلة في اتخاذ قرار بشأن المسؤوليات الطبقية.
لدي 3 أشكال HTML:

  1. لكل نموذج ، يوجد قالب HTML يحتوي على بعض النص وعلامة لتضمين النموذج
  2. يجب التحقق من صحة كل نموذج ، إذا كان هناك خطأ في القالب ويحتاج النموذج من (1) إلى إعادة تشغيله ، مع بعض رسائل الخطأ. فقط بعض الحقول شائعة عبر الأشكال المختلفة.
  3. إذا لم تكن هناك أخطاء ، تحتاج رسالة النتيجة إلى إرسالها بالبريد. لكل نموذج يوجد قالب بريد نتيجة.

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

  • CheckFormData: التحقق من بيانات النموذج
  • DisplayForm: نموذج العرض مع/بدون أخطاء (أو افصل هذا أيضًا؟)
  • البريد الإلكتروني: البريد الإلكتروني.

أنا غير متأكد من هذا. المعرفة حول الحقول من شكل معين هي مشتتة على الاتجاه الفصول المختلفة.

هناك بعض سير العمل. ربما يجب أن أحصل أيضًا على فصل سير العمل:

class FormSubmitWorkFlow
{
   function start() 
   {
     $this->displayForm->render();
   }

   function processFormData($data)
   {
      $this->checkForm->setData($data);
      if (!$this->checkForm->isValid())    {

         $errors = $this->checkForm->getErrors();
         $this->displayForm->setData($data)->setErrors($errors)->render();
      } else {
         $this->emailForm->setData($data)->email();
      }
   }

   function setDisplayForm(DisplayForm $df)
   {
      $this->displayForm = $df;
   }

   function setCheckForm(CheckForm $cf)
   {
      $this->checkForm = $cf;
   }

   function setEmailForm(CheckForm $ef)
   {
      $this->emailForm = $ef;
   }
}

لكل نوع شكل (تذكر ، هناك 3 منهم) سأحتاج

  1. CheckForm,
  2. EmailForm و
  3. DisplayForm صف دراسي.

3*3 = 9 فئات + 3 فئات قاعدة = 12 فئة.
أيضًا ، تريد حقن الفحص الصحيح والكلاس والكلاس عبر البريد الإلكتروني في سير العمل ، فكلهم يجب أن يكونوا من نفس النوع. ربما نحتاج إلى إنشاء formworkflowfactory لهذا. هذا يضيف ما يصل إلى 13 الطبقات.

الآن شعرت أنني أفعل شيئًا خاطئًا بشكل فظيع. لو كان لدي FormSubmitWorkFlow كطريقة طريقة قالب ، يمكنني فقط إنشاء 3 فئات فرعية ، لكن كل فئة فرعية من شأنها أن تمزج مسؤوليات مختلفة.

كيف يمكنك تحسين هذا ، وهل يمكنك تحفيز إجابتك ، أي ما هي الطريقة التي تقودك إلى إجابتك؟


تعديل: على الرغم من أن الإجابة الحالية الوحيدة مفيدة ، إلا أنه سيكون من الجيد رؤية بعض الأصوات من أشخاص يتفقون عليها ، أو أود أن أسمع حلولًا أفضل من المجتمع. أنا الوحيد الذي قام بإعداد هذه الإجابة. يمكن أن يستخدم هذا السؤال المزيد من المدخلات ، لذلك لا تتردد في تقديم ذلك :-)

هل كانت مفيدة؟

المحلول

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

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

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