سؤال

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

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

ولكن يبدو أن هذا، حسنًا، متسخ.لكن من المفترض أن تكون وحدات التحكم خفيفة الوزن، أليس كذلك؟ولا ينبغي أن يكون منطق الأعمال في طرق العرض، كما هو موجود لدي.

فأين ينبغي تجميع هذه المعلومات؟نموذج جديد لا يتم تعيينه إلى جدول؟وظيفة/وحدة مكتبة؟أو أي شيء آخر؟

(على الرغم من أنني أرى أن هذا في الغالب يتعلق بسؤال معماري/نمط، إلا أنني أعمل في Rails، FWIW.)

يحرر:إجابات جيدة من جميع النواحي، والكثير من الإجماع، وهو أمر مطمئن.لقد "قبلت" الإجابة التي قمت بها للحفاظ على رابط Railscasts في الأعلى.لقد تأخرت في مشاهدة Railscast - وهو أمر سأقوم بمحاولات مضنية لتصحيحه!

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

المحلول

كما قال براين، يمكنك إنشاء نموذج آخر ينظم العمل الذي يجب القيام به.هنالك بث سكك حديدية رائع حول كيفية القيام بهذا النوع من الأشياء.

هث

نصائح أخرى

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

لماذا لا ننشئ نموذجا لا يرث ActiveRecord::Base وقم بتنفيذ المنطق هناك (فكر في فئة Cart في Agile...With Rails).

لا يجب أن تكون وحدات التحكم كذلك الذي - التي وزن خفيف.

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

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

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