أنماط GRASP: تعدد الأشكال ، التصنيع النقي ، عدم الاتجاه ، الاختلافات المحمية

مرحبا هبر! اسمي فلاديسلاف رودين. أنا حاليًا رئيس دورة الهندسة الثقيلة في OTUS وأقوم أيضًا بتدريس دورات هندسة البرمجيات.



خاصة بالنسبة لبداية مجموعة جديدة لدورة "الهندسة المعمارية وأنماط التصميم" ، أواصل سلسلة منشوراتي حول أنماط GRASP.










المقدمة



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



تتكون القائمة الكاملة لنماذج GRASP من 9 عناصر:



  • خبير المعلومات
  • المنشئ
  • مراقب
  • اقتران منخفض
  • تماسك عالي
  • تعدد الأشكال


ناقشنا آخر مرة نمط وحدة التحكم . أقترح اليوم النظر في الأنماط المتبقية من القائمة.



تعدد الأشكال



يجب التعامل مع السلوكيات المختلفة بناءً على النوع ، مما يسمح باستبدال أجزاء النظام.



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



يعد وجود إنشاء مفتاح في الكود انتهاكًا لهذا المبدأ ، والمفاتيح وتخضع لإعادة البناء.



يؤدي الإفراط في استخدام تعدد الأشكال إلى تعقيد الكود بشكل مفرط ولا يُنصح به عمومًا.



تلفيق نقي



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



المراوغة



من الضروري توزيع المسؤوليات بين الأشياء ، وتجنب الارتباط المباشر. للقيام بذلك ، يمكنك تعيين مسؤوليات الاتصال بين المكونات أو الخدمات لكائن وسيط.



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



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



الاختلافات المحمية



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



في الواقع ، هذا ليس نمطًا ، ولكنه هدف يتحقق باتباع بقية الأنماط.



انتاج |



تتكون قوالب GRASP من 8 أنماط:



  1. خبير المعلومات - نقوم بمعالجة المعلومات أينما وردت.
  2. الخالق - نصنع الأشياء عند الحاجة.
  3. وحدة التحكم - ننقل منطق تعدد مؤشرات الترابط إلى فئة أو مكون منفصل.
  4. اقتران منخفض 5) تماسك عالٍ - نصمم فئات بمنطق عمل متجانس وأقل عدد من الاتصالات فيما بينها.
  5. تعدد الأشكال - نرتب خيارات مختلفة لسلوك النظام في شكل مكالمات متعددة الأشكال إذا لزم الأمر.
  6. Pure Fabrication — , , Low Coupling High Cohesion.
  7. Indirection — .
  8. Protected Variations — , .






:






All Articles