02-08-13, 12:31 PM
(آخر تعديل لهذه المشاركة : 02-08-13, 12:37 PM {2} بواسطة بشار الذيب.)
السلام عليكم
هناك مبادئ تخص هندسة البرامج، مجموعة كلها في الاختصار : SOLID
موجودة على ويكيبيديا
وساشرحها باختصار وبقدر فهمي في عدة أجزاء
الحرف الاول من كلمة SOLID وهو S
يشير إلى الاختصار SRP = Single responsibility principle
أي المسئولية الوحيدة
هذا المبدأ ينص على أن الفئة\الكلاس يجب ان تكون لديه مسئولية واحدة فقط، كيف ؟
لو كان لدينا فئة تمثل بيانات شخص Person فإنه من المحرمات الكبرى حسب مبدأ SRP أن نضع داخل الفئة مسئوليات أخرى غير احتوائها لبيانات الشخص
مسئوليات مثل ماذا؟ ،،،، مثلا لو أردنا حفظ بيانات شخص في قاعدة البيانات ، إياك ان تحفظه من خلال الفئة نفسها،، ما العمل إذاً ؟
لنشرح المثال السابق :
فئة Person
إذا خالفنا المبدأ سنقوم بعمل الجريمة التالية (سنضيف كود حفظ + حذف)
والبديل هو إنشاء فئة أخرى لتأدية هذه الوظيفة
[COLOR="#FF0000"]
السؤال الذي يحوم في ذهن القارئ [/COLOR]، لماذا لا اختصر الموضوع واجعلهم في فئة واحدة ؟؟؟ (وهذا ما كنت أؤمن به سابقاً ولكني كفرت به)
والجواب يا عزيزي تحصل عليه إذا سألناك : ماذا لو أردنا حفظ البيانات في ملف xml أو ملف نصي ؟ هل نقوم كل مرة باشتقاق الفئة ؟ أو نضيف وسيط داخل Save ونحدد له أين نريد الحفظ ؟
أليس الأمثل أن نترك الأمر إلى فئة أخرى لتحفظه أين شائت ؟ وبذلك نزيل التعقيد من الفئة Person لتبقى مسئوليتها الوحيدة فقط هي تمثيل بيانات أي شخص
عادةً يسمون الفئات التي تحفظ البيانات بـ Reposirotry بمعنى مستودع (فيه مجموعة أكواد قراءة وكتابة بيانات من وإلى جدول معين)
هناك مبادئ تخص هندسة البرامج، مجموعة كلها في الاختصار : SOLID
موجودة على ويكيبيديا
وساشرحها باختصار وبقدر فهمي في عدة أجزاء
الحرف الاول من كلمة SOLID وهو S
يشير إلى الاختصار SRP = Single responsibility principle
أي المسئولية الوحيدة
هذا المبدأ ينص على أن الفئة\الكلاس يجب ان تكون لديه مسئولية واحدة فقط، كيف ؟
لو كان لدينا فئة تمثل بيانات شخص Person فإنه من المحرمات الكبرى حسب مبدأ SRP أن نضع داخل الفئة مسئوليات أخرى غير احتوائها لبيانات الشخص
مسئوليات مثل ماذا؟ ،،،، مثلا لو أردنا حفظ بيانات شخص في قاعدة البيانات ، إياك ان تحفظه من خلال الفئة نفسها،، ما العمل إذاً ؟
لنشرح المثال السابق :
فئة Person
PHP كود :
Public Class Person
Public Property Name As String
Public Property Cpr As String
End Class
PHP كود :
Public Class Person
Public Property Name As String
Public Property Cpr As String
Public Sub Save()
'Update Code
End Sub
Public Sub Delete()
'Delete Code
End Sub
End Class
PHP كود :
Public Class PersonData
Public Sub Save(p As Person)
'Update Code
End Sub
Public Sub Delete(p As Person)
'Delete Code
End Sub
End Class
السؤال الذي يحوم في ذهن القارئ [/COLOR]، لماذا لا اختصر الموضوع واجعلهم في فئة واحدة ؟؟؟ (وهذا ما كنت أؤمن به سابقاً ولكني كفرت به)
والجواب يا عزيزي تحصل عليه إذا سألناك : ماذا لو أردنا حفظ البيانات في ملف xml أو ملف نصي ؟ هل نقوم كل مرة باشتقاق الفئة ؟ أو نضيف وسيط داخل Save ونحدد له أين نريد الحفظ ؟
أليس الأمثل أن نترك الأمر إلى فئة أخرى لتحفظه أين شائت ؟ وبذلك نزيل التعقيد من الفئة Person لتبقى مسئوليتها الوحيدة فقط هي تمثيل بيانات أي شخص
عادةً يسمون الفئات التي تحفظ البيانات بـ Reposirotry بمعنى مستودع (فيه مجموعة أكواد قراءة وكتابة بيانات من وإلى جدول معين)