سؤال

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

أين يجب وضع هذا المنطق؟

  1. على الكائن كوسيلة؟ يحب: instance.approximately_equal(other)
  2. على فئة الكائن كطريقة فئة/ثابتة؟ class.approximately_equal(a,b)
  3. على كائن المجموعة كطريقة؟ collection.approximately_equal(a,b)

ما هو تصميم OO الصحيح لهذا؟

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

شكرًا

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

المحلول

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

نصائح أخرى

أود استخدام الخيار 1 (طريقة المثيل) لأن ذلك يمكّنك من تحسين منطق المقارنة في الفئات المشتقة (إذا لزم الأمر).

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

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