اگر جایی استخدام شدی و سمتی بهت سپرده شد و کاری که داری انجام میدی با عنوان سمت سازمانیت نمیخونه و در شرح وظایفت نیست، این اصل داره نقض میشه.
Single Responsibility Principle (SRP)
به طور کل مفهوم ساده ای هست. اینکه هر کلاس باید وظیفه ی خاص خودش رو داشته باشه و اصطلاحا توی کار بقیه قسمت ها دخالتی نداشته باشه.
شاید این برامون سوال پیش بیاره که به عنوان نمونه اگر دو کلاس سفارش و مشتری داشته باشیم وظیفه ی سفارش گذاری برای مشتری به عهده ی کدوم کلاس هست؟
در نگاه اول ممکنه این به ذهنمون برسه که در کلاس سفارش با در اختیار داشتن آبجکت یا شناسه ی مشتری در تابع Save میشه این کار رو انجام داد. اما اگر کنترل اعتبار مشتری مورد نیاز باشه چه اتفاقی میفته؟
یا حتی کنترل های دیگه ای که در زمان ثبت ممکنه اتفاق بیفته از قبیل:
- کنترل موجودی کالاها
- کنترل حداقل/حداکثر تعداد سفارش
- کنترل فعال یا غیر فعال بودن مشتری
کنترل هر کدام از این موارد در کلاس مشتری یا سفارش عملا این دو کلاس رو به هم وابسته کرده و مسئولیت های چند گانه رو بهشون محول کردیم.
و اما راه حل:
یک راه حل میتونه این باشه که دو کلاس OrderService و CustomerService در نظر گرفت و توابع مورد نیاز رو در اون پیاده سازی کرد.
تمام توابع این کلاس، به دو آبجکت مشتری و سفارش نیاز دارن تا وظیفه ی خودشون رو انجام بدن.
نکته1: مطالعه و پیاده سازی اصول SOLID به تنهایی شاید گیج کننده باشه. چیزی که قطعا به پیاده سازی دقیق تر کمک میکنه شناخت Design Pattern هاست که اصولا همه ی اونها برای کمک به پیاده سازی همین اصول طراحی شدن.
نکته2: یکی از اصول Clean Code نامگذاری مناسب است. هر جا احساس کردین کدی که دارید مینویسید به اسم کلاستون مربوط نمیشه، به کاری که دارین میکنین شک کنین.