سؤال

Core CS سؤال هنا: من أنماط التصميم المدرجة في جاما، إلخ، والتي (إن وجدت) يغطي الحمدية؟ بالإضافة إلى ذلك، لأي فئة من المشاكل هي unkePatching المناسبة مقابل الفئة الفرعية؟ البق الترقيع في فصول المكتبة الأساسية هي واحدة، هل هناك آخرون؟ أسمع الكثير من Sturm und Drang حول الرصم في Stackoverflow، معظمكم يبدو أن لديها مخاوف قوية حول هذا الموضوع، ولكن كمبرمج أحب حقا القدرة على تغليف البتات العامة من الوظائف وتضمينها في نماذج كائناتي في القضبان.

خذ الأفكار - PaperClip، على سبيل المثال، لماذا أريد أن أرغب في الفئة الفرعية التي أفعلها من أي وقت مضى تقترب من نهج الرد المشاهدي الموجود اليوم؟

شكرا، -

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

المحلول

لا أعتقد أن الأحمق هو نمط تصميم - امتداد الفئة الأساسية ميزة لغة يبدو أنها تتجاهلها.

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

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

لذلك قواعدي الشخصية للاحترام هي:

  • إذا كان بإمكانك القيام بذلك دون أرقام، فسوف تعمل على ما يرام، ولا تستخدم الرد المغناطيسي.
  • يمكنك إضافة طرق جديدة للفصول الدراسية، ولكن لا يمكنك تعديل تلك الموجودة.
  • افعل ذلك بطريقة واضحة للغاية وواضحة - أي ملف يسمى String_Extensions.rb في الخاص بك / ليب، وليس على مخفي /myvendor/submodule/se.rb.
  • يجب أن يكون محلي يجب أن تتأثر الفصول التي لا تستخدم مكتبة.

الآن، إلى مثالك: PaperClip.

  • إلى حد علمي، يضيف أساليب إلى فصول activerecord الخاص بك، ولكن لا تعدل تلك الموجودة
  • عليك أن تضيف has_attachment التوجيه إلى الفصول التي تستخدم PaperClip، وإلا فإنها لا تتأثر.

لذلك يتم توطين التغييرات واضحة (أعتقد فعلا أنه يدير يحسن تصحيح الأخطاء: أسهل بالنسبة لنا البشر القراءة has_attachment بدلا من class MyModel < Paperclip::ActiveRecordWithAttachment).

الفئة الفرعية هي أيضا فكرة سيئة في هذه الحالة لأنك لن تكون قادرا على استخدام PaperClip بالإضافة إلى مكون إضافي آخر يستخدمه الفئات الفرعية - القضبان موروثة واحدة.

وفي حالة PaperClip، من الواضح أن has_a العلاقة مع مرفقها، وليس is_a واحد. يمكن للمرء أن يجادل بأنه لن يكون استخداما صحيحا للدفاعي.

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

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