Single Responsibility Principle(SRP)
SRP: هر عضو برنامه باید تنها و فقط تنها یک وظیفه مشخص داشته باشد و به عبارت دیگر هر عضو برنامه تنها به یک علت تغییر یابد.
به مثال زیر توجه کنید:
class Authentication:
def get_data_from_db(self):
pass
def authenticate_user(self):
pass
def create_a_log_on_logserver(self):
pass
همانطور که میبینی کلاسی به نام Authentication ساختیم که سه متد دارد. متد get_data_from_db همانگونه که از نام آن مشخص است، مسئول دریافت داده از دیتابیس است. متد authenticate_user مسئول تعیین هویت کاربران است احتمالا این متد داده خود برای احراز هویت کاربران را از متد قبلی میگیرد. در نهایت متد سوم create _a_log_on_logserver یک لاگ را بر روی لاگسرور ایجاد میکند. این کد اصل اول از اصول SOLID یعنی SRP را نقض میکند. کلاس Authentication ممکن است به سه دلیل تغییر کند. اولی تغییر در شیوه بازیابی دادهها از دیتابیس یعنی تغییر در متد اول، دوم تغییر در شیوه حراز هویت کاربران یعنی تغییر در متد دوم و در نهایت تغییر در شیوه ایجاد لاگ و ذخیره آن در لاگسرور.
یک کار انجام بده ولی درست و حسابی!
کدی که اصل SRP را در آن رعایت کردهایم:
class DB_Operations:
def get_date_from_db(self):
pass
def other(self):
pass
class Authenticate_User:
def auth(self):
pass
def other(self):
pass
class Log_Operations:
def create_a_log_on_logserver(self):
pass
def other(self):
pass
همانطور که میبینید سه کلاس مجزا برای مدیریت فقط یک تسک نوشتیم. در این حالت کلاسهای ما فقط به یک منظور تغییر میکنند. اصل SRP فقط مختص به کلاسها نیست، اجزای دیگر برنامه مانند توابع و متدها نیز بهتر است از این اصل پیروی کنند.