سؤال

في الآونة الأخيرة بفضل القضبان شعبية, كثير من الناس تبدأ باستخدام activerecord كنموذج.ومع ذلك, قبل سمعت من القضبان (بلدي مجموعة الأقران كنت لا مروحة مفتوحة المصدر الأشياء التي كانت تدرس في .صافي المدرسة...) وبينما كنت أقوم مشروع السنة النهائية, لقد وجدت هذا التعريف عن نموذج

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

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

إذن ما هو كبير حتى عن استغلال (IMHO) activerecord كنموذج في MVC المعمارية النمط ؟

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

المحلول

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

إذا كنت ترغب في ذلك إلا أشياء بسيطة يمكنك استخدام المعاملات النصي.هذا هو بنية رأيت في الكثير من القديم ASP و PHP الصفحات حيث نصي واحد يرد على منطق الأعمال ، البيانات-access المنطق و منطق العرض.هذا ينهار بسرعة عندما تصبح الأمور أكثر تعقيدا.

الشيء التالي الذي يمكنك القيام به هو إضافة بعض الفاصل بين عرض النموذج.هذا هو activerecord.نموذج لا يزال مرتبطا قاعدة البيانات ولكن كنت أكثر قليلا من المرونة لأنه يمكنك إعادة استخدام النموذج الخاص بك/dataccess بين وجهات النظر/pages/أيا كان.انها ليست مرنة كما يمكن أن يكون ولكن اعتمادا على البيانات الخاصة بك-الوصول إلى حل يمكن أن تكون مرنة بما فيه الكفاية.أطر مثل CSLA في .صافي لديهم الكثير من الجوانب من هذا patterm (أعتقد إطار الكيان تبدو قليلا مثل الكثير من هذا أيضا).فإنه يمكن أن لا تزال تحمل الكثير من التعقيد دون أن تصبح unmaintainable.

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

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

نصائح أخرى

لقد قلت مرات عديدة أن استخدام السجل النشط (أو ORM وهو تقريبا نفس) كما في نماذج الأعمال ليست فكرة جيدة.اسمحوا لي أن أشرح:

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

  • عقيدة
  • دفع
  • QCodo
  • سبات
  • RedBean

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

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

سماع @Mendelt الكلمات الحكيمة:قراءة مارتن فاولر.لقد وضع العديد من الكتب والمقالات حول OO تصميم و نشر بعض المواد الجيدة حول هذا الموضوع.أيضا, قد ترغب في النظر في مكافحة أنماط, تحديدا في بائع قفل في, وهو ما يحدث عندما نجعل التطبيق لدينا تعتمد على 3rd الطرف الأدوات.أخيرا, كتبت هذا بلوق وظيفة يتحدث عن نفس المشكلة, حتى إذا كنت تريد أن تحقق من ذلك.

الأمل كان جوابي من أي استخدام.

إن الشيء العظيم حول استخدام القضبان ActiveRecord نموذجا في MVC هو أنه يتيح لك تلقائي ORM (الكائن العلائقية معين) و طريقة سهلة لإنشاء الجمعيات بين النماذج.كما أشار إلى MVC يمكن أن تكون في بعض الأحيان غير موجودة.

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

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