47 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| 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) يحتوي على أمثلة ومعلومات إضافية حول أنماط التصميم |