Започвам една поредица от пет статии, в които ще пиша за пет добри принципа в обектно-ориентираното програмиране. Първо ще започна със Single Responsibility Principle или SRP. Той гласи че всеки обект трябва да е отговорен за едно нещо. Ако имаме един клас които се грижи, за всички аспекти по определен процес или за всички относно един реален обект, тогава всички е наред. Ако класа ви манипулира други обекти или е просто едно място на което сте наблъскали някакви методи, то нещо не е наред. Нека нашето приложение sWa(supper web app) имам един прост клас с тези методи:
class StatefulNotificationController extends sWa_SBaseObject { public function __construct() { } public function loadNotification(SApp $App, $notification_id) { } public function check() { } public function delete(SApp $App) { } public function store(SApp $App) { } }
На пръв поглед може да кажете какво прави всеки един от тези методи. Имаме метод за зареждане на съобщения, имаме един за проверка, един за изтриване и един за записване. Всеки един от тях прави нещо върху самият обект и само върху него. Но нека добавим още един метод:
public function getNotificationConfigurableHandlerByThreadedTaskChannel(SApp $App, $project_id = 0, $notification_id = 0, $thread_id = 0, $search = '') { }
Да, защо да няма метод с такова име. Като видим името на самият метод, разбираме че тук стават доста неща. Дори като видим, че има три различни обекта, като параметри, е нормално да заподозрем, че ние се бъркаме в тяхната работа. Ако в един от тези класове настъпи малка промяна, ние трябва да се върнем в този метод и да преправяме кода тук. След което трябва да отидем на всички други места на които се бъркаме директно с обекта на класа и да променяме и там. Това не е желателно и затова отделяме обектите, като всеки отговаря само за една задача и променя само своето състояние.