SOLID principles شرح | Part 1

أكيد نفسك يبقا كودك منظم ومحدش يقولك الكلمة دى صح .




دردشة
فى الاول خلينى أسالك كام مرة بعد ما بعد ما عملت مشروعك ونفذت اكتر من كلاس جه العميل قالك انا عايز اضيف ميزة جديده للابليكشن بتاعى ؟ وعشان انت ملزق اكواد وكلاسات جنب بعد بتخاف تعدل فى الكود ليضرب فى وشك لو عدلت مره والتانيه والتالته يجى زميلك يستلم منك عشان يكمل عشان انت بتعمل حاجه تانيه قام قايل مين السباك اللى كاتب الكود دا😂

احب اطمنك من سنين كانوا بيعملوا زيك كدا لحد ما جه عمك Robert C. Martin سنه 1995 ونشر ورقه بحثيه بعنوان Design Principles and Design Patterns وبتكلم فيها ازى نبنى برامج ناجحة قابلة للتعديل والصيانة والتوسعة او بشكل عام نكتب clean code والكونسبت اللى هنتكلم عنه النهارده دا واحده من الاساسيات اللى اتذكرت فى الورقه البحثية.
---------------------------------------------------------------------------------------------------------------
تعريف SOLID

هي مجموعة من المبادئ لبناء software يتبع افضل الحلول البرمجية والتي يطلق عليها Best Practices والتي من خلالها نقوم ببناء برامج ناجحة قابلة للتعديل والصيانة والتوسعة، اما معنى كلمة SOLID اختصار للخمس مبادئ المكونة لها بحيث تم اخذ اول حرف من كل مبدأ زى ما هنشوف.
1-Single responsibility 
2-Open-closed 
3-Liskov substitution 
4-Interface segregation 
5-Dependency inversion
---------------------------------------------------------------------------------------------------------------

Single responsibility

المبدأ دا بيقولك أن كل كلاس لازم يكون ليه هدف واحد يعنى كل المتغيرات والميثود اللى جواه ماشيه فى اتجاه واحد ولو فيه ميثود مش بتحقق المبدأ دا يبقا تحطها فى كلاس لوحده زعلان ليه بس هفهمك.



مثال توضيحى
لو عندنا Car Class يمثل سيارة وبه شويه Methods مثل ()startEngine و ()accelerate و ()stopEngine اذا افترضنا اننا احتجنا نضيف ميزة جديدة تقوم بقيادة السيارة لمكان معين هنعملها Method جديدة اسمها ()driveToPlace

انت هتلاحظ انها ليست متسقة مع باقى وظائف Car كلاس السيارة ليست من مهمتها قيادة نفسها الى مكان معين وبذلك نكون قد خالفنا مبدا ال Single responsibility فإن هذه الميزة الجديدة لها هدف جديد مختلف باقي اهداف Car كلاس ويجب ان يكون هذا الهدف او الميزة الجديدة جزء من كلاس جديد يدعى Driver وبذلك لن نخالف مبدأ Single responsibility اعتقد كدا وصلت وملكش حجه يبقى الكلاس لازم يكون يحقق هدف واحد بس وكل الميثود فيه بيخدم الهدف دا .

Before single responsibility
class Car{
	String name;
	String color;
	
	public void startEngine(){
		
		//Start .......
	}
	
	public void accelerate(){
		
		//Accelerate .....
	}
	
	public void stopEngine(){
		//Stop ......
	}
	
	driveToPlace(){
		
		//Drive to ....
	}
}

After single responsibility

class Car{

	String name;
	String color;
}
class CarAction extends Car{

	
	public void startEngine(){
		
		//Start .......
	}
	
	public void accelerate(){
		
		//Accelerate .....
	}
	
	public void stopEngine(){
		//Stop ......
	}
	
}

class Driver extends Car{

	
	driveToPlace(){
		
		//Drive to ....
	}
	
}
---------------------------------------------------------------------------------------------------------------
Open-Closed

بص يا سيدى انا عندى كلمتين افتح واقفل طب هفتح ايه واقفل ايه .
مشروعنا عباره عن مجموعه Module زى الكلاس مثلا فلازم المديول دى تكون مفتوحه قدام توسعيها او اننا نزود ليها اضافات جديده بس مقفوله قدام اننا نعدل فيها مباشره مش فاهم صح ؟



مثال توضيحى
هوضحلك اكتر لو عندك كلاس اسمه car وفيه مجموعه مميزات وانا جيت بعد سنه قولت ليك عايزين نعمل ميزه جديده نعمل ايه حسب المبدا دا؟

نعمل كلاس تانى يورث من الكلاس الرئيسى كل المميزات القديمه واضيف الميزه الجديده فانا كدا الكلاس مفتوح قدامى للتعديل والتوسيع بس انا معدلتش فيه مباشره يعنى معدلتش فى الاصل فانا كدا حققت مبدا Open-Close .

---------------------------------------------------------------------------------------------------------------
الى اللقاء

طبعا انت بتقول فين باقى الحروف يا لص؟
وانا هقولك انا قولتك 2 بس ودول اسهلهم عشان تستوعبهم كويس وتفهم الهدف من SOLID فانا عايزك بقا تسرش وتفهم اكتر وتشوف امثاله ككود عشان تثبت فى دماغك وان شاء الله نكمل فى المقال الجاى الباقى


Comments

Post a Comment