freeCodeCamp/guide/arabic/software-engineering/design-patterns/index.md

47 lines
4.5 KiB
Markdown
Raw Normal View History

---
title: Design Patterns
localeTitle: أنماط التصميم
---
## أنماط التصميم
يستخدم المبرمجون ومهندسو البرمجيات أنماطًا للتصميم لحل المشكلات **الشائعة والمتكررة** في بنية البرامج. توفر الأنماط منهجًا لاغيا لغويا **للبرامج الموجهة للكائنات** التي تساعد المطورين على اتباع مبادئ التصميم الجيد للتطبيق.
### لماذا تصميم الأنماط؟
يوفر تطوير أنماط التصميم العديد من المزايا:
* من السهل اتباع مبادئ البرمجة الجيدة مثل **[مبادئ](https://medium.com/@cramirez92/s-o-l-i-d-the-first-5-priciples-of-object-oriented-design-with-javascript-790f6ac9b9fa) [SOLID](https://www.youtube.com/watch?v=XzdhzyAukMM) .**
* إنها تحافظ قطع كود أصغر حتى متاحة أسهل **لاختبار** **والتصحيح**
* فهو يساعد في الحفاظ على الشفرة مقترنة بشكل فضفاض حتى يسهل **إعادة استخدام** الكود **وتحديثه** للتطبيقات الجديدة
* إنه يسهل **فهم** الشفرة ، بحيث يمكن للمساهمين الجدد أن **يكبروا بسرعة**
استخدام أنماط التصميم يتطلب بعض المقايضات ، ويجب على مطوري البرامج الجدد أن يتذكروا ما يلي:
* لا **توجد رصاصات فضية** في البرمجة ، وأنماط التصميم ليست استثناء
* وتضيف أنماط التصميم **طبقة من التجريد** إلى الشفرة ، مما يزيد من التصميم الأولي والجهد الإنمائي
* إن الإفراط في استخدام أنماط التصميم أو إجبارها على ملاءمتها يجعل من **الصعب** فهم الشفرة
### دعم اللغة
نشأت أنماط التصميم من عالم اللغات المكتوبة بشكل ثابت مثل C ++ و Java و C #. تعتمد معظم الموارد حول التطوير حسب نمط التصميم على واحدة من هذه اللغات.
ومع ذلك ، فإن أنماط التصميم هي فقط: الأنماط. فهي **ليست تطبيقات** ، مثل الطبقات أو الواجهات ، **وليست مقيدة لأي لغة واحدة** .
عندما تتعلم أنماط التصميم داخل لغة ديناميكية ، إذا بدت أنماط معينة معقدة بدون داع أو غير بديهية ، تذكر أصولها. لا يزال بإمكان المطورين في اللغات الديناميكية استخدام أنماط التصميم التالية والاستفادة منها ، على الرغم من أنه قد يلزم المزيد من الأبحاث لفهمها بشكل كامل.
### الاستخدامات
أنماط التصميم ممتازة في حل مشاكل الترميز الأساسية بطريقة بسيطة ومتكررة. على نطاق واسع ، تنقسم إلى ثلاث فئات:
* الأنماط **الإبداعية** تصف كيفية إنشاء كائنات جديدة
* تصف الأنماط **الهيكلية** كيفية إنشاء الكائنات خارج الكائنات الأخرى
* الأنماط **السلوكية** تصف كيف تتواصل الكائنات مع بعضها البعض
يمكن تنفيذ هذه المهام بدون أنماط تصميم ، ولكن أنماط التصميم **تقلل من مخاطر** أنك ستنتهك الممارسات الجيدة وإنشاء كود يصعب الحفاظ عليه.
#### معلومات اكثر:
* [أنماط تصميم](https://github.com/kamranahmedse/design-patterns-for-humans) كامران أحمد [للبشر](https://github.com/kamranahmedse/design-patterns-for-humans) هي مقدمة ممتازة للأنماط المحددة
* [أنماط التصميم](https://en.wikipedia.org/wiki/Design_Patterns) هو الكتاب الذي بدأ هذه الممارسة
* توفر [أنماط](https://martinfowler.com/eaaCatalog/) مارتن فاولر [من هندسة التطبيقات التطبيقية](https://martinfowler.com/eaaCatalog/) مجموعة من الأنماط الأكثر تطوراً لتطبيقات المؤسسات
* يوفر Sourcemaking موردًا [عبر الإنترنت](https://sourcemaking.com/design_patterns) يحتوي على أمثلة ومعلومات إضافية حول أنماط التصميم