سؤال

لدي نوعان من المنتجات - مخفضة (10% قرص) وغير مخفضة (0%)، يمكن أن يكون كل منهما إما منتجًا محليًا أو منتجًا قابلاً للتصدير مع جذب أحدهما للتصدير لضريبة مبيعات بنسبة 15%.

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

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

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

المحلول

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

  • على الرغم من أنه يمكن تقديم حجة مفادها أن المخصوم/غير المخصوم هو اختلاف في السلوك، إلا أنه من التافه اختزال هذا في سلوك واحد:جميع المنتجات لديها خصم، ولكن مبلغ الخصم هو 0٪ على المنتجات غير المخفضة.هذه مجرد سمة لمنتجاتك (discount_amount)، وليست فئة منفصلة.

  • قد يكون أو لا يكون للمحلي/القابل للتصدير سلوكيات مميزة.إذا كان الاختلاف الوحيد هو ما إذا كان المنتج مسموحًا بشحنه دوليًا أم لا، فيجب أن تتعامل العلامة المنطقية البسيطة مع هذا التمييز بشكل أكثر من كافٍ.من ناحية أخرى، إذا كانت المنتجات القابلة للتصدير تتطلب سلوكيات لا تدعمها المنتجات المحلية (على سبيل المثال، تسجيل المتطلبات والإجراءات الجمركية)، فسيكون من المناسب إما جعل المنتج القابل للتصدير فئة فرعية من المنتج المحلي (إذا كانت سلوكيات المنتج القابل للتصدير هي مجموعة شاملة من المنتجات المحلية) سلوكيات المنتج) أو قم بإنشاء فئة منتج مجردة باستخدام الفئات الفرعية LocalProduct وExportableProduct (إذا كانت المنتجات المحلية تحتوي أيضًا على سلوكيات غير مدعومة من قبل المنتجات القابلة للتصدير).

نصائح أخرى

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

وأود أن تفعل هذا:

هل لديك فئة تسمى "المنتج" الذي يحتوي على الخصائص الأساسية للمنتج مثل الاسم والوصف، اكتب، وما إلى ذلك.

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

وبعد ذلك هل يمكن أن يكون فئتين "ExportableProduct" و "LocalProduct"، وكلاهما يرث من فئة "المنتجات".

وأود أن أقترح أنه ربما مخفضة / يجب أن لا يكون NonDiscounted أنواع المنتجات على الإطلاق. لدينا بدلا نوعين فرعيين، و"الخصم" الملكية / حقل في المنتج الأم. يمكن لكل منتج ثم لديها أي خصم على نحو فعال. وهذا يسمح أيضا للخصم ليست ثابتة عند 10٪.

سأتجنب الميراث (أي الكتابة الفرعية) لهذا الغرض فقط.

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

ثم في فصل منفصل، على سبيل المثال:PricingCalculator، حدد طريقة الحساب (ربما تكون ثابتة) التي تقبل مثيل المنتج.تقوم هذه الطريقة ببساطة بفحص خصائص التعداد وتطبيق قيم النسبة المئوية المطلوبة في الحساب.

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

وأود أن تجنب كل شيء، ويكون مجرد خاصيتين: discount وlocal

ولما كان هناك شيء واحد فقط أن التغييرات (السعر)، ويمكنك حساب ذلك على الطاير (خصم => price * .9 والتصدير => price * .85 - أو حتى على حد سواء => تصدير والخصم => price * .9 * .85)

الميراث مفيد بشكل خاص عندما أكثر من الشيء يختلف حسب النوع.

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

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

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

ولكن أخشى انها مجرد جزء صغير من مشكلة أكبر. ثم عليك أن تسأل نفسك: ما الذي يجعل المنتج منتج (مسؤولية واحدة). Taxability وdiscountability وربما اثنين اهتمامات مختلفة، لذلك المنتج الخاص بك ينتهي مع اثنين من الاستراتيجيات.

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