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

Konsep Element pada Beanstalkd

12/11/2024

Konsep Element pada Beanstalkd

Beanstalkd adalah sebuah sistem manajemen antrian yang mendasarkan operasinya pada beberapa konsep inti yang menjadikannya tools yang sangat berguna dalam pengembangan aplikasi yang memerlukan manajemen tugas atau pekerjaan yang berjalan…

View
GraphQL vs REST API Apa Bedanya?

11/11/2024

GraphQL vs REST API Apa Bedanya?

 API atau Application Programming Interface adalah sebuah protokol atau teknologi yang digunakan menangani sebuah perangkat lunak berinteraksi satu sama lain. Salah satu contohnya adalah untuk mendapatkan data dari database.      GraphQL API menyediakan kemudahan dalam…

View
Kolaborasi Solid, Strategi Tepat, Solusi Terbaik untuk Sukses Pelanggan

30/09/2024

Collaboration is solid, precise strategy, and the best solution for customer success

The team gathered to refine the go-to-market strategy and ensure that all preparations are smoothly executed before the launch of the latest mobile application. Each team supports one another and ensures that every aspect is well implemented. With...

View