Saturday, July 11, 2015

Pola Desain SOLID 1: Single Responsibilty Principe

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.

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