هل يجب أن أكرر التحقق من صحة طبقة MVC وطبقة الخدمة الخاصة بي؟

StackOverflow https://stackoverflow.com/questions/3141253

سؤال

أشعر بالتعارض قليلاً في الوقت الحالي. لديّ تطبيق ويب باستخدام خطوط لإطار عمل MVC و SPRING/HIBERNATE للنهاية الخلفية. لدي طريقة تسجيل حساب في طبقة MVC الخاصة بي والتي تتطلب التحقق من الصحة التالية:

  • اسم المستخدم لم يؤخذ بالفعل
  • عنوان البريد الإلكتروني المقدم غير مرتبط بالفعل بحساب آخر

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

تحرير: أنا لا أنوي تكرار رمز التحقق - أعني تكرار مكالمات طريقة التحقق من الصحة في مكانين.

أرى خياراتي على النحو التالي:

  1. تكرار مكالمات التحقق من الصحة في كل من MVC وطبقة الخدمة
  2. قم فقط بإجراء هذا التحقق من الصحة في طبقة MVC
  3. فقط أداء هذا التحقق من الصحة في طبقة الخدمة.

ما هي أفضل ممارسة هنا؟ أنا أبحث عن نصيحة/آراء حول الخيار الذي يجب أن أذهب إليه ولماذا.

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

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

المحلول

آني ،

سؤال جيد ، لقد سألت نفسي في العديد من المناسبات. إليك ما انتهى بي الأمر (حتى الآن).

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

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

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

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

نصائح أخرى

لا تكرر الكود. يستخدم JSR303 التحقق من صحة الفول حتى تتمكن من استخدام نفس منطق التحقق من الصحة في جميع طبقات التطبيق الخاص بك.

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

في رأيي يجب أن تختلف عن نوعين من عمليات التحقق:

  • التحقق من صحة بيانات التنسيق: والتي يجب التحقق من صحتها في طبقة العرض التقديمي (MVC في قضيتك). عادة في كل من العميل وجانب الخادم
  • التحقق من صحة بيانات Bussines: والتي يجب التحقق من صحتها في طبقة الخدمة

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

  1. من الناحية المثالية ، قم بالتحقق من الصحة في كلتا الطبقتين ، حيث يمكن استخدام طبقة الخدمة الخاصة بك مع عميل آخر غير طبقة MVC الحالية

  2. أعد استخدام آلية التحقق من الصحة في كلا المكانين (التحقق من صحة الفول ، على سبيل المثال)

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