Definisi
Menurut pengarang buku Robert C. Martin dalam bukunya Agile Software Development, Principles, and Practices, Single Responsibility Principle adalah:
"A class should have only one reason to change".
Yang artinya sebuah kelas harus mempunyai hanya 1 alasan untuk berubah (tidak lebih).
Tapi tunggu, kenapa sebuah kelas tidak boleh memiliki lebih dari 1 alasan untuk dirubah? Sebab, nantinya kita harus melakukan testing Class atau Module untuk alasan yang berbeda dan ini memakan waktu dan tenaga yang lebih.
Pengguna
Pada asalnya menentukan Single Responsibility pada sebuah Class atau Module cukup rumit. Ketika Kita ingin mencari sebuah alasan untuk mengubah sebuah Class, salah satu caranya dengan menganalisa audiens sebuah Class. Mereka sebagai pengguna sistem atau aplikasi yang kita kembangkan jugalah orang yang meminta perubahan pada Class atau Module tersebut. Sebagai contoh:
Module Pencarian Buku pada Sistem Manajemen Perpustakaan - Audiensnya adalah Petugas Perpustakaan dan/atau klien itu sendiri.
Module Pencarian Buku pada Sistem Manajemen Perpustakaan - Audiensnya adalah Petugas Perpustakaan dan/atau klien itu sendiri.
Peran dan Pemeran
Disebuah perusahaan kecil seseorang mungkin bisa menjalankan banyak peran, sementara di perusahaan besar mungkin beberapa orang ditugaskan untuk satu peran. Dan dalam situasi seperti ini, kita harus tahu apa peran itu sendiri dan bagaimana kita menemukannya. Akan lebih mudah bila kita membayangkan para pemeran film yang memainkan peran-peran dan kita mengasosiasikannya dengan audiens / user sistem dengan para pemeran film tadi.
"So a responsibility is a family of functions that serves one particular actor." - Robert C. Martin
Sumber dari Perubahan
Dari perspektif alasan, pemeran tadi merupakan sumber dari perubahan pada sekumpulan fungsi yang melayani mereka. Ketika kebutuhan mereka berubah, maka sekumpulan fungsi yang melayani mereka juga harus berubah untuk memenuhi kebutuhan mereka."An actor for a responsibility is the single source of change for that responsibility." - Robert C. Martin)
Contoh Klasik
Object Yang Bisa "Mencetak" Sendiri
class Buku { public function getJudul() { return "Lorem"; } public function getPengarang() { return "Fulan"; } public function halamanBerikut() { } public function cetakHalamanSaatIni() { echo "konten halaman saat ini"; } }
gooo