اصل SRP

اصول SOLID برای بهتر و خوانا شدن کد های برنامه های شی گرا کمک فراوانی می کند. اولین اصل تک وظیفه ای بودن می باشد که در ادامه به توضیح این اصل می پردازیم.
اصل تک وظیفه ای بودن بدین معناست که هر کلاس و یا تابع می بایست برای انجام یک وظیفه ایجاد گردد که در این صورت در مواقع تغییر تنها یک دلیل می تواند آن را تغییر دهید. بگذارید یک مقدار بیشتر در مورد این اصل توضیح بدهیم. در واقع این اصل از درهم تنیدگی کد ها و کلاس ها و همچنین کدها ی موروثی جلوگیری می کند. بدین صورت که در ابتدا هر کلاس با توجه به وظیفه ای که انجام می دهد نام گذاری می گردد. و تمامی اجزا کلاس در راستای وظیفه موجود ایجاد می گردند.
در دنیای واقعی نیز مثال های زیادی می توان برای تمثیل این اصل بیان نمود. اجرای کارها با ابزار های چند کاره همانند مجموعه آچار چند کاره شاید به ظاهر جالب و جذاب به نظر برسد. در نگاه اول انجام کار با این قسم ابزار ها بسیار منطقی و به صرفه است، چراکه با داشتن یک ابزار چند کاره تعداد زیادی کار همانند باز و بسته کردن پیچ، غذا خوردن، گرفتن ناخن، باز کردن درب بطری و… می توان انجام داد. اما در حین اجرا متوجه سختی کار با این ابزار خواهید شد. اگر یک مقایسه برای سفت کردن پیچ با آچار چند کاره و آچار مخصوص داشته باشیم متوجه خواهیم شد کار با آچار مخصوص بسیار چابک تر، دارای آسیب کمتر و دقیق تر خواهد بود.
حال فرض کنید این کار بخواهد در دفعات زیادی انجام شود. کارآیی آچار مخصوص به مراتب بیشتر از آچار همه کاره خواهد بود. در واقع هیچ مکانیک و یا فرد متخصص فنی از آچار همه کاره برای انجام امور خود استفاده نخواهد کرد.
شاید بتوان این اصل را به نقلی از مثل فارسی «با یک دست چند هندوانه برداشتن» دانست.
در دنیای برنامه نویسی شی گرا نیز هنگامی که یک کلاس چندین وظیفه را انجام می دهد تغییر یک وظیفه نیاز مند تغییر قسمتی از یک کلاس است که از طرفی که این امر ناقض دیگر اصول SOLID نیز می باشد. در واقع اصول SOLID تکمیل کننده یکدیگر هستند و نقض یک اصل می تواند ناقض چند اصل دیگر نیز بشود.
فرض کنید کلاسی وظیفه خواند اطلاعات دانش آموز را دارد. برای فراخواندن اطلاعات دانش آموز ابتدا می بایست به دیتابیس متصل شد و با اجرای کوئری مناسب اطلاعات را بازیابی کرد.
در این مثال چنانچه دو وظیفه اتصال به دیتابیس و اجرای کوئری و بازیابی اطلاعات در یک کلاس صورت می پذیرد. که این امر ناقض اصل SRP خواهد بود. برای بازسازی (Refactoring) می بایست ابتدا یک کلاس تنها برای اتصال به دیتابیس و مدیریت کانکشن و یک کلاس دیگر برای بازیابی داشته باشیم.
از طرفی اصل تک وظیفه ای بودن نیز می تواند در راستای اصل DRY نیز باشد. چراکه ایجاد کلاس بابت اتصال به دیتابیس می تواند در کوئری های دیگر به دیتابیس استفاده گردد و از تکرار کد در قسمت های مختلف برنامه جلوگیری کند.
اصل تک وظیفه بودن در سطح توابع و متدها نیز میبایست برقرار گردد. داشتن توابعی با انجا چندین وظیفه می تواند ناقض این اصل باشد.
مزایا
پیروی از این اصل منجر به ایجاد کلاس های بیشتر می گردد ولی از طرفی کلاس ها ساده تر خواهد شد. این سادگی به توسعه دهندگان کمک خواهد کرد درک بهتری از برنامه داشته باشند. همچنین توسعه و یا تغییر برنامه به صورت ساده تر و سریع تر و کم خطا تر صورت می پذیرد.
از طرفی آزمون پذیری بسیار بیشتر خواهد شد. داشت قطعه کد های آزمون پذیر مزیت ها فراوانی خواهد داشت و از جمله فاکتورهای مهم برای داشتن کد تمیز می باشد. خوانایی کد با اجرای این اصل به مراتب خیلی بیشتر می گردد و از ایجاد کدهای درهم تنیده جلوگیری می نماید.
خلاصه
اصول SOLID برای ایجاد کد های تمیز و خوانا الزامی می باشد. اصل اول SRP مربوط به تک وظیفه بودن کلاس ها و توابع می باشد. به طوریکه هر کلاس می بایست اجرای یک وظیفه را بر عهده بگیرد. پیروی از این اصل منجر به تولید کدهای خواناتر، ساده تر می گردد و از ایجاد کد درهم تنیده و تکراری جلوگیری می نماید.
برچسب ها: