اصل یگانگی مسئولیت

اصل یگانگی وظیفه یک اصل برنامه‌نویسی رایانه است که براساس آن هر ماژول، کلاس، یا تابع باید مسئولیت تنها یک بخش از ویژگی‌های ارائه شده توسط نرم‌افزار را برعهده داشته باشد. همچنین باید وظیفهٔ فوق به‌طور کامل توسط کلاس، ماژول یا تابع محصور شده باشد. ماژول یا عملکرد. کلیهٔ خدمات باید با این مسئولیت تنگاتنگ باشد. رابرت سسیل مارتین این اصل را چنین بیان می‌کند: «یک کلاس فقط باید یک دلیل برای تغییر داشته باشد» اگرچه به دلیل سردرگمی پیرامون کلمه «دلیل» او اخیراً اظهار داشت «این اصل در مورد مردم است.»

تاریخچه 
این اصطلاح توسط رابرت سی مارتین در مقاله‌ای با همین نام به عنوان بخشی از اصول طراحی شیءگرا، که به‌وسیلهٔ کتاب خود «توسعهٔ نرم‌افزار چابک، اصول، الگوها و تمرینات» مشهور شده‌است. مارتین این اصل را مبتنی بر اصل انسجام توصیف کرد. همین‌طور تام دمرکو در کتاب خود «توصیف ساختار یافته و مشخصات سیستم» و میلیر پیجونز در «راهنمای عملی طراحی سیستم‌های ساختاری» این اصل را به همین شکل توصیف کرده‌اند. در سال ۲۰۱۴ مارتین یک پست وبلاگ با عنوان «اصل یگانگی وظیفه» با هدف توضیح عبارت «دلیل تغییر» منتشر کرد.

مثال 
مارتین «مسئولیت» یا «وظیفه» را به عنوان دلیلی برای تغییر تعریف می‌کند و نتیجه می‌گیرد که یک کلاس یا ماژول باید یک دلیل و تنها یک دلیل برای تغییر (یعنی بازنویسی) داشته باشد. به عنوان مثال، ماژولی را در نظر بگیرید که گزارش‌ها را گردآوری و چاپ می‌کند. تصور کنید چنین ماژولی به دو دلیل قابل تغییر است. اول، محتوای گزارش می‌تواند تغییر کند. دوم، قالب گزارش می‌تواند تغییر کند. این دو چیز به دلایل بسیار متفاوتی تغییر می‌کنند. یکی به دلایل ماهوی و دیگری به دلایل زیبایی‌شناختی. اصل یگانگی مسئولیت می‌گوید که این دو جنبه مسئله در واقع دو مسئولیت جداگانه هستند و بنابراین باید در کلاس‌ها یا ماژول‌های جداگانه قرار گیرند. قرار دادن دو چیز مختلف که به دلایل متفاوتی تغییر می‌کنند در یک واحد نرم‌افزاری یک طراحی نامناسب به‌شمار می‌رود.

دلیل اهمیت تمرکز یک کلاس بر یک موضوع این است که باعث می‌شود کلاس سرراست شود. در ادامهٔ مثال قبلی، اگر تغییری در فرایند تهیهٔ گزارش ایجاد شود، کد چاپ (در صورتی که بخشی از همان کلاس باشد) احتمال شکست بالاتری دارد.

جستارهای وابسته 
 تفکیک دغدغه‌ها
 الگوی زنجیرهٔ مسئولیت
 انسجام (علم کامپیوتر)
 اصل باز-بسته
 حرف S در SOLID مخفف اصل یگانگی مسئولیت است
  GRASP (طراحی شیءگرا)

منابع

پیوند به بیرون 
 راز پشت اصل مسئولیت منفرد
 اصل مسئولیت واحد
اصول برنامه‌نویسی
طراحی نرم‌افزار