Fondasi Kokoh untuk Pengembangan Software

Fondasi Kokoh untuk Pengembangan Software

SOLID Principles adalah salah satu prinsip “standar” yang bisa diterapkan pada kode program yang kita buat. Apabila kita menerapkan prinsip SOLID, maka kode yang kita buat akan menjadi jauh lebih baik; lebih mudah di-maintain, flexible, reusable, extendable. Dengan kata lain, kode kita menjadi lebih “pro”.

SOLID dipopulerkan oleh Uncle Bob (Robert C. Martin), meskipun beberapa item di dalamnya sudah pernah dipopulerkan sebelumnya oleh orang lain. Uncle Bob adalah penulis buku “Clean Code: A Handbook of Agile Software Craftsmanship”. Ini adalah salah satu buku yang kami rekomendasikan kepada setiap para programmer untuk dibaca.

“Writing clean code is what you must do in order to call yourself a professional. There is no reasonable excuse for doing anything less than your best.” Robert C. Martin

1. SRP (Single Responsibility Principle)

Definisi: “A class should have one and only one reason to change (single responsibility)” Dalam satu class, hanya boleh diisi dengan satu tanggung jawab. Jangan memasukan kode yang beraneka ragam ke dalam satu class. Contoh: Jika class tersebut bertanggung jawab untuk me-manage tabel “users”, maka tidak boleh dibebani lagi dengan tabel “orders” misalnya, atau dengan menambahkan perhitungan diskon akhir tahun. Perhitungan diskon harus dipisahkan ke class tersendiri. Manajemen tabel “orders” pun harus dipisah ke class tersendiri.

Mengapa hal ini penting?

  • Saat menulis class atau function yang didedikasikan untuk satu fungsi, akan lebih mudah untuk memahami, memelihara, dan memodifikasi kode Anda.
  • Jika Anda ingin mengubah fungsionalitas sistem, akan mudah mencari bagian code yang harus diubah.
  • Membuat kode lebih terorganisir dan mudah dibaca. Ini juga membuat penggunaan kembali kode menjadi lebih mudah.


2. OCP (Open Closed Principle)

Definisi: “Entities (classes, modules, functions etc.) should be open for extension but closed for modifications”.

Class/function harus dapat di-extend fungsinya tanpa merubah kode di dalamnya. Hmm terdengar tricky, tapi dalam programming hal itu bisa dilakukan.

Ide ini difasilitasi oleh Open/Closed Principle. function, class, dan modul kita harus dirancang sedemikian rupa sehingga terbuka untuk perluasan, namun tertutup untuk modifikasi.

  • Open for Extension: Fungsi baru dapat ditambahkan ke dalam class dan modul tanpa merusak kode yang ada. Komposisi dan warisan dapat digunakan untuk mencapai hal ini.
  • Closed for Modification: Sebaiknya jangan membuat perubahan yang merusak fungsionalitas saat ini, karena hal ini memerlukan refactoring dari kode yang sudah ada dan menulis beberapa pengujian untuk memastikan perubahan tersebut berfungsi.


3. LSP (Liskov Substitution Principle)

Definisi: “Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it”. Class harus bisa di-switch dengan class turunannya tanpa menyebabkan kesalahan logic ataupun teknis.


4. ISP (Interface Segregation Principle)

Clients should not be forced to depend upon interfaces that they do not use.”

Interface dibuat sesuai dengan kebutuhan klien, dan tidak boleh memaksa untuk mengimplementasi semua function. Karena, mungkin beberapa function tidak dibutuhkan oleh class tersebut.


5. DIP (Dependency Inversion/Injention Principle)

Definisi: “Clients should not be forced to depend upon interfaces that they do not use.” A. “High level modules should not depend upon low level modules. both should depend upon abstractions.” B. “Abstractions should not depend upon details. Details should depend upon abstractions.”

Mirip-mirip SRP, tapi ini berlaku ntuk interface. Interface juga tidak boleh memiliki terlalu banyak function sehingga memaksa client class nya untuk mengimplementasi semua function. Karena, mungkin beberapa function tidak dibutuhkan oleh class tersebut.


Kesimpulan

A. Prinsip Single Responsibility (SRP) :
Dengan memisahkan tanggung jawab dalam kelas-kelas yang berbeda, kita menciptakan kode yang lebih mudah dimengerti, dikelola, dan diperbaiki. Setiap kelas seharusnya memiliki satu alasan untuk berubah.


B. Prinsip Open/Closed (OCP) :
Kode seharusnya terbuka untuk perluasan namun tertutup untuk modifikasi. Ini mendorong penggunaan pewarisan dan polimorfisme untuk mengubah perilaku tanpa mengubah kode yang sudah ada.


C. Prinsip Liskov Substitution (LSP) :
SubClass seharusnya bisa digunakan sebagai pengganti kelas induk tanpa memengaruhi kebenaran program. Ini memastikan hubungan semantik antar kelas.


D. Prinsip Interface Segregation (ISP) :
Interface yang spesifik untuk setiap kelas membantu menghindari implementasi yang tidak diperlukan. Kelas seharusnya hanya mengimplementasikan apa yang diperlukan, mencegah pengaruh yang berlebihan.


E. Prinsip Dependency Inversion (DIP) :
Bergantung pada abstraksi daripada implementasi konkrit memungkinkan fleksibilitas dan menghindari ketergantungan yang kuat antara komponen-komponen sistem.

Berita Rekomendasi

Implementasi Machine Learning di Flutter

11/11/2024

Implementasi Machine Learning di Flutter

Machine learning pada dasarnya adalah proses pelatihan sebuah perangkat lunak yang disebut model, yang berguna untuk mempelajari pola pada sebuah dataset. Model ini kemudian dapat digunakan untuk memprediksi data yang…

Lihat
The first thing to know about the Loop component in Microsoft Teams

12/11/2024

The first thing to know about the Loop component in Microsoft Teams

1. Komponen Loop dibuat untuk kolaborasi Saat Anda mengirim komponen Loop, semua orang dalam obrolan Anda dapat mengeditnya sebaris—dan melihat perubahan secara langsung. Artinya, Anda dapat berkolaborasi langsung di dalam pesan obrolan.…

Lihat
Enkripsi Database Mysql, Postgresql, dan Oracle

12/11/2024

Enkripsi Database Mysql, Postgresql, dan Oracle

Keamanan data adalah hal yang terpenting agar terciptanya suatu sistem yang baik. Enkripsi database merupakan proses mengubah data dalam sebuah database menjadi bentuk yang tidak dapat dibaca oleh orang yang…

Lihat