Recommend this page to a friend! |
Classes of Nahidul Hasan | PHP Solid Principles Examples | README_ID.md | Download |
|
DownloadSOLID Principles - dijelaskan dengan mudah dan sederhana"SOLID Principles" adalah sebuah "coding standard" yang harus dipahami secara matang konsepnya oleh semua developer untuk men-develop sebuah software dengan jalan yang tepat untuk menghindari desain yang buruk dikemudian hari. Konsep ini dipromosikan pertama kali oleh Robert C Martin yang kemudian digunakan lintas bahasa dengan desain yang berorientasi objek. Ketika digunakan dengan tepat, konsep ini akan membuat baris kode anda lebih mudah di kembangkan, logis, dan tentunya mudah dibaca dan dipahami. Saat seorang developer membuat sebuah software dengan desain yang buruk, kodenya akan menjadi tidak fleksibel, dan lebih rapuh, perubahan kecil dalam software akan mengakibatkan bugs (kesalahan). Untuk alasan itulah, kita harus mengikuti "SOLID Principles". Perlu beberapa waktu untuk memahaminya, tetapi jika Anda menulis kode dengan mengikuti prinsip-prinsip tersebut, itu akan meningkatkan kualitas kode dan akan membantu untuk memahami bagaimana software yang dirancang dengan baik. Untuk memahami prinsip SOLID, Anda harus mengetahui penggunaan Saya akan mencoba menjelaskan SOLID Principles dengan cara yang sederhana, jadi ini akan mudah dipahami bagi pemula. Mari kita lanjut ke pembahasannya satu per satu: Single Responsibility Principles:>Sebuah class harus mempunyai satu, dan hanya satu alasan untuk diubah. Sebuah class harus digunakan untuk satu kegunaan pula, ini tidak berarti bahwa setiap class hanya memiliki satu method tetapi semuanya harus berhubungan langsung dengan class yang bertanggung jawab. Semua method dan properties nya harus bekerja untuk tujuan yang sama. Jika sebuah class melayani beberapa tujuan atau tanggung jawab, (multiple purposes / responsibilty) maka class tersebut harus dipecah menjadi class baru. Mari kita lihat kode berikut ini:
Class diatas melanggar prinsip "Single Responsibility". Kenapa class tersebut mengambil data dari database? Ini berkaitan dengan persistensi. Persistensi berhubungan dengan (menyimpan dan mengambil) data dari penyimpanan data (sepert database, misalnya). Jadi ini bukanlah tanggung jawab dari class ini. Format method selanjutnya juga tidak memiliki tanggung jawab dari class ini. Karena kita mungkin membutuhkan format data yang berbeda seperti XML, JSON, HTML dll. Jadi, kode yang sudah di refactory akan dijelaskan seperti dibawah ini:
Open-closed Principle :> Entitas harus open untuk ekstension, tetapi closed untuk modifikasi. Entitas dari software (class, module, function, dll.) harus bisa di extend tanpa harus mengubah konten dari class yang diextend. Jika kita menerapkan prinsip ini dengan kuat, maka mungkin untuk melakukan modifikasi perilaku dari kode yang kita miliki tanpa perlu menyentuh sedikitpun dari kode aslinya. Perhatikan contoh berikut ini:
Jika kita ingin menggunakan
Sekarang, kita bisa menghitung area persegi tanpa harus melakukan modifikasi terhadap class *catatan: contoh diatas menggunakan Liskov Substitution Principle :Liskov Substitution Principle diperkenalkan oleh Barbara Liskov dalam acara konferensinya dengan keynote "Data Abstraction" pada tahun 1987. Barbara Liskov dan Jeannette Wing mem-formulasikan prinsip ini secara ringkas dalam sebuah makalah tahun 1994 sebagai berikut: >Let ?(x) be a property provable about objects x of type T. Then ?(y) should be true for objects y of type S where S is a subtype of T. Versi yang lebih mudah dibacanya mengulangi hampir semuanya, seperti yang dikatakan Bertrand Meyer, tetapi itu sepenuhnya bergantung pada >1. Preconditions cannot be strengthened in a subtype. >1. Preconditions tidak dapat diperkuat dalam subtype. >2. Postconditions cannot be weakened in a subtype. >2. Postconditions tidak dapat dilemahkan dalam subtype. >3. Invariants of the supertype must be preserved in a subtype. >3. Invariants dari supertype harus dipertahankan dalam subtype. Robert Martin membuat definisinya terdengar lebih lancar dan ringkas pada tahun 1996 : >Functions that use pointers of references to base classes must be able to use objects of derived classes without knowing it. >Function yang menguunakan pointers of references ke class utamanya, harus dapat menggunakan object dari class turunannya tanpa mengetahuinya. Atau sederhananya: Subclass atau class turunan, harus dapat disubstitusikan untuk kelas dasar/induk (parent) nya. Ini menyatakan bahwa setiap implementasi abstraction (interface) harus dapat diganti di mana pun abstraksinya diterima. Pada dasarnya, perlu diperhatikan saat kita menggunakan interface di dalam kode, kita tidak hanya memiliki kontrak input yang diterima interface tetapi juga output yang dikembalikan oleh Class yang berbeda yang mengimplementasikan interface itu; mereka seharusnya dari tipe yang sama. Sebuah cuplikan kode yang menunjukkan pelanggaran prinsip LSP (Liskov Substitution Principle) dan bagaimana cara memperbaikinya:
Interface Segregation Principle :>Klien tidak boleh dipaksa untuk mengimplementasikan interface yang tidak digunakannya. Aturan ini berarti bahwa kita harus memecah interface kita menjadi banyak yang lebih kecil, sehingga mereka bisa memenuhi kebutuhan klien kita. Mirip dengan "Single Responsibility Principle", tujuan dari "Interface Segregation Principle" adalah untuk meminimalisir dari efek samping dan pengulangan dengan membagi software jadi beberapa bagian, yang independen. Mari kita lihat contoh berikut:
Dari kode diatas,
Dependency Inversion Principle :>High-level modules tidak boleh bergantung pada low-level modules. Keduanya harus bergantung pada abstractions. >Abstraction tidak boleh bergantung pada detail. Detail harus bergantung pada abstractions. Atau sederhananya: Bergantung pada Abstractions bukan pada concretions Dengan menerapkan "Dependency Inversion", modules dapat dengan mudah diubah oleh modules lain hanya dengan mengubah dependency modul dan High-level modul tidak akan terpengaruh oleh perubahan apa pun pada Low-level modul. Perhatikan kode berikut:
Ada kesalahpahaman umum bahwa dependency inversion hanyalah cara lain untuk mengatakan dependency injection. Namun, keduanya tidak sama. Dalam kode di atas Meskipun class Modul High-level Jika kita ingin mengubah koneksi dari Class
Dalam kode diatas, kita ingin mengubah koneksi dari Publikasi "Better Programming" sudah menerbitkan artikel ini. Jika anda menyukainya, anda bisa membacanya di halaman blog "Better Programming", silahkan menuju ke sini link. Terima kasih sudah membaca. LicensePerangkat lunak Open-sourced ini dilisensikan dibawah MIT license |