السلام عليكم ورحمة الله
أود ان امر على موضوع مفيد جدا في عالم البرمجة عموما ثم توضيح تطبيقاته من خلال لغة سي شارب والذي يتطلب معرفة واتقال للبرمجة الكائنية أو غرضية التوجه OOP
ما هو فصل الجوانت Separation of concerns ؟
كما هو معلوم فإن البرمجية الكائنية أو غرضية التوجه طرحت مصطلح الكائن object والصنف class من أجل تنظيم الكود البرمجي ضمن هذه الأصناف بحيث يتحمل كل كلاس مسؤولية محددة من البرنامج ككل مثلا كلاس ادارة الحساب المصرفي , يتبادر إلى الذهن ان مثل هكذا كلاس سيحوي توابع متعلقة بالحساب المصرفي مثل سحب الرصيد والإيداع والتحويل على الشكل المبسط:
class BankAccount
{
int Balance;
bool Withdraw(int amount)
{
if(Balance >= amount) { Balance -= amount; return true;} else return false;
}
}
المشكلة في تصميم الكلاسات في OOP أنها لا تحوي حل للجوانب المتشابكة cross cutting concerns أي بمعنى آخر هناك منطق في البرنامج يفرض نفسه في أكثر من مكان على سبيل المثال تابع التحقق من هوية المستخدم الحالي وعليه فإننا في التصميم السابق سنضيف استعاء لتابع تحقق من المستخدم الحالي قبل منطق التابع نفسه في كل من سحب الرصيد والايداع والتحويل وحتى في جوانب أخرى مثل تعديل المعلومات الشخصية للمستخدم.
class BankAccount
{
int Balance;
bool Withdraw(int amount)
{
if( ! ValidUser() ) throw new Exception("Not valid user");
if(Balance >= amount) { Balance -= amount; return true;} else return false;
}
}
وكمثال آخر تابع مثل التحقق من الاتصال قبل البداية بالإجراء ضمن كل تابع فيه اتصال سيجعل التحقق من الاتصال موجود في كلاسات لا تعنى بهذا الجانب ومن هنا جاءت فكرة البرمجة الموجه إلى فصل الجوانب AOP والتي تعرف مصطلحات جديدة للعالم البرمجة.