سؤال

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

هل يمكن لأي شخص أن يشرح لي بكلمات بسيطة ما هي المضادة للنمط؟ ما هو الهدف؟ ماذا يعملون؟ هل هو شيء سيء أو شيء جيد؟

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

المحلول

مكافحة الأنماط هي أنماط معينة في تطوير البرمجيات التي تعتبر ممارسات برمجة سيئة.

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

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

علي سبيل المثال:

class GodObject {
    function PerformInitialization() {}
    function ReadFromFile() {}
    function WriteToFile() {}
    function DisplayToScreen() {}
    function PerformCalculation() {}
    function ValidateInput() {}
    // and so on... //
}

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

class FileInputOutput {
    function ReadFromFile() {}
    function WriteToFile() {}
}

class UserInputOutput {
    function DisplayToScreen() {}
    function ValidateInput() {}
}

class Logic {
    function PerformInitialization() {}
    function PerformCalculation() {}
}

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

نصائح أخرى

كلما سمعت عن مكافحة الأنماط، أتراجع مصطلح آخر. رائحة التصميم.

"رائحة التصميم هي بعض الهياكل في التصميم تشير إلى انتهاك مبادئ التصميم الأساسية وجودة التصميم السلبي". (من "Refactoring للحصول على رائحة تصميم البرامج: إدارة الديون الفنية")

هناك العديد من الروائح التصميم المبوبة بناء على مبادئ تصميم الانتهاك:

رائحة التجريد

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

التجريد الضروري: تنشأ هذه الرائحة عندما تتحول عملية إلى فئة.

تجريد غير مكتمل: تنشأ هذه الرائحة عندما لا يدعم التجريد الطرق التكميلية أو مترابطة تماما.

التجريد متعدد الأوجه: تنشأ هذه الرائحة عندما يتمتع بتجريد أكثر من مسؤولية واحدة مخصصة لها.

التجريد غير الضروري: تحدث هذه الرائحة عندما يتم إدخال تجريد غير مطلوبة بالفعل (وبالتالي يمكن تجنبها) في تصميم البرمجيات.

التجريد غير المستخدم: تنشأ هذه الرائحة عند ترك التجريد غير مستخدمة (إما غير مستخدم مباشرة أو غير قابل للوصول).

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

ظهور الروائح

التغليف ناقص: تحدث هذه الرائحة عندما تكون إمكانية الوصول المعلن لأحد أو أكثر من أفراد التجريد أكثر عرضة من الحاجة إليها.

التغليف المتسربة: تنشأ هذه الرائحة عند التجريد "تعرض تفاصيل التنفيذ" أو "التسريب" من خلال واجهة عامة.

التغليف المفقود: تحدث هذه الرائحة عند عدم تغليف اختلافات التنفيذ ضمن التدريجي أو التسلسل الهرمي.

غلاف غير منفصل: تنشأ هذه الرائحة عندما يستخدم رمز العميل شيكات كتب صريحة (باستخدام بيانات بالسلاسل IF-ELED أو التبديل التي تحقق من نوع الكائن) بدلا من استغلال الاختلاف في الأنواع مغلفة بالفعل ضمن التسلسل الهرمي.

وضع الروائح المعدنية

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

تعديل غير كاف: تنشأ هذه الرائحة عندما توجد تجريد غير متحللة تماما، وقد يؤدي التحلل الإضافي إلى تقليل حجمها أو تعقيد التنفيذ أو كليهما.

النيابة المعتمدة من الدراسة: تنشأ هذه الرائحة عندما تعتمد تجريدتان أو أكثر على بعضهما البعض بشكل مباشر أو غير مباشر (إنشاء اقتران ضيق بين التجريدات).

وحدات تشبه المحور: تنشأ هذه الرائحة عندما يكون التجريد يحتوي على تبعيات (كلا من الوارد والصادر) بعدد كبير من التجريدات الأخرى.

رائحة التسلسل الهرمي

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

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

التسلسل الهرمي الذي لا يرضع: تنشأ هذه الرائحة عندما يكون هناك ازدواجية غير ضرورية بين الأنواع في التسلسل الهرمي.

التسلسل الهرمي الواسع: تنشأ هذه الرائحة عندما يكون التسلسل الهرمي للميراث هو "للغاية" يشير إلى أن الأنواع الوسيطة قد تكون مفقودة.

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

التسلسل الهرمي العميق: تنشأ هذه الرائحة عندما يكون التسلسل الهرمي للميراث عميق "بشكل مفرط".

التسلسل الهرمي المتمرد: تنشأ هذه الرائحة عندما يرفض نوع فرعي الطرق التي تقدمها Supertype (S).

التسلسل الهرمي المكسور: تنشأ هذه الرائحة عندما لا تشارك Supertype وفروعها الفنية من الناحية الفنية علاقات "هي- أ" مما يؤدي إلى استبدال مكسورة.

التسلسل الهرمي المتعدد: تنشأ هذه الرائحة عندما يرث نوع فرعي كليهما بشكل مباشر بشكل غير مباشر من Supertype يؤدي إلى مسارات الميراث غير الضرورية في التسلسل الهرمي.

التسلسل الهرمي الدوري: تنشأ هذه الرائحة عندما تعتمد Supertype في التسلسل الهرمي على أي من أنواعها الفرعية.


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

نمط هو فكرة عن كيفية حل مشكلة من الفئة. يعد Anti-Pattern فكرة عن كيفية حلها لأن تنفيذ هذه الفكرة سيؤدي إلى تصميم سيء.

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

مضاد للنمط هو وسيلة لعدم حل مشكلة. ولكن هناك أكثر من ذلك: إنها أيضا طريقة يمكن رؤيتها في كثير من الأحيان في محاولات حل المشكلة.

إذا كنت ترغب حقا في دراسة Antipatterns، احصل على الكتاب antipatterns. (ISBN-13: 978-0471197133).

فيها، يحددون "antipattern هو شكل أدبي يصف حلا يحدث عادة لمشكلة تولد عواقب سلبية بالتأكيد".

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

طريقة شائعة لجعل الفوضى. مثل فئة الله / كيتشينزينك (يفعل كل شيء)، على سبيل المثال.

أ مكافحة النمط هو تكملة نمط التصميم. وبعد Anti-Pattern هو حل قالب يجب أن لا تستخدمه في موقف معين.

تماما مثل مع نمط التصميم, ، مكافحة النمط هو أيضا قالب وسيلة قابلة للتكرار لحل مشكلة معينة، ولكن بطريقة غير مثالية وغير فعالة.

ومن المثير للاهتمام أن طريقة معينة لحل مشكلة يمكن أن تكون نمطا ومضادا للنمط. Singleton هو المثال الرئيسي لهذا. سيظهر في كلتا المجموعتين من الأدب.

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

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

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

إن الأنماط المضادة للأنماط هي طرق شائعة تميل الناس إلى برنامج الخطأ، أو على الأقل ليست طريقة جيدة للغاية.

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

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

يمكنك التحقق من السؤال ما هو سيء للغاية عن المفردين؟ لفهم أفضل الآراء المختلفة على ذلك.

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

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