Series Belajar Solid Principle - Single Responsibility Principle (SRP)
Tags: programming, solid, srp, indonesia
Published: 2024-04-17 13:15:02

---
title: Series Belajar Solid Principle - Single Responsibility Principle (SRP)

published: true
description: Dengan menerapkan Prinsip SRP, kita dapat membuat kode kita lebih terstruktur, mudah dimengerti, dan mudah dikelola. Setiap class sekarang memiliki tanggung jawab yang jelas dan terdefinisi dengan baik, sehingga membantu meningkatkan keberlanjutan dan skalabilitas kode kita.

tags: programming,solid,srp,indonesia

cover_image: https://dev-to-uploads.s3.amazonaws.com/uploads/articles/189te5ry83ljm3zezasu.jpg
---

Dalam dunia pengembangan perangkat lunak, SRP merupakan salah satu konsep yang sangat fundamental. SRP adalah bagian dari SOLID Principle. 

Dalam artikel ini, gw akan mengulas SRP secara detail dan menerapkannya dalam konteks pengembangan aplikasi menggunakan PHP.
kenapa menggunakan PHP? karena PHP Bahasa Pemrograman Sejuta umat, agar mudah dimengerti oleh khalayak ramai :D.


### Apa Itu Single Responsibility Principle (SRP)?

SRP adalah prinsip desain perangkat lunak (Design Pattern) yang menyatakan bahwa sebuah class harus bertanggung jawab atas satu hal saja. Ini membantu menjaga class tetap terfokus, mudah dimengerti, dan mudah diubah.

#### Contoh kodingan tanpa menerapkan SRP

Mari kita lihat contoh sebelum menerapkan SRP. Misalkan kita memiliki class CheckoutManager dalam sebuah toko online. class ini bertanggung jawab untuk melakukan sejumlah tindakan seperti memperbarui database, mengirim email konfirmasi, dan mengirim pesan WhatsApp kepada pelanggan.

``` php
class CheckoutManager {
    public function processCheckout($cartItems, $customerInfo) {
        $this->updateDatabase($cartItems);
        $this->sendEmail($customerInfo);
        $this->sendWhatsAppMessage($customerInfo);
    }

    private function updateDatabase($cartItems) {
        // Logika untuk memperbarui status dalam database
    }

    private function sendEmail($customerInfo) {
        // Logika untuk mengirim email konfirmasi kepada pelanggan
    }

    private function sendWhatsAppMessage($customerInfo) {
        // Logika untuk mengirim pesan WhatsApp konfirmasi kepada pelanggan
    }
}
```

#### Penerapan SRP
Sekarang, mari kita terapkan SRP dengan membagi tanggung jawab tersebut ke dalam class class yang lebih spesifik.

Pembaruan Database
``` php
class DatabaseUpdater {
    public function update($cartItems) {
        // Logika untuk memperbarui status dalam database
    }
}
```

Kirim Email
``` php
class EmailSender {
    public function send($customerInfo) {
        // Logika untuk mengirim email konfirmasi kepada pelanggan
    }
}
```
kirim whatsapp
``` php
class WhatsAppSender {
    public function send($customerInfo) {
        // Logika untuk mengirim pesan WhatsApp konfirmasi kepada pelanggan
    }
}
```

#### Integrasi dengan SRP
Sekarang, kita dapat mengintegrasikan class class tersebut ke dalam CheckoutManager.

``` php

class CheckoutManager {
    private $databaseUpdater;
    private $emailSender;
    private $whatsAppSender;

    public function __construct(DatabaseUpdater $databaseUpdater, EmailSender $emailSender, WhatsAppSender $whatsAppSender) {
        $this->databaseUpdater = $databaseUpdater;
        $this->emailSender = $emailSender;
        $this->whatsAppSender = $whatsAppSender;
    }

    public function processCheckout($cartItems, $customerInfo) {
        $this->databaseUpdater->update($cartItems);
        $this->emailSender->send($customerInfo);
        $this->whatsAppSender->send($customerInfo);
    }
}
```

Dengan menerapkan SRP, kita dapat membuat kode kita lebih terstruktur, mudah dimengerti, dan mudah dikelola. Setiap class sekarang memiliki tanggung jawab yang jelas dan terdefinisi dengan baik, sehingga membantu meningkatkan keberlanjutan dan skalabilitas kode kita 🚀.

Sekian sekilas mengenai SRP. di next artikel gw akan buat artikel mengenai SOLID Princple lainnya yaitu Open Close Principle,Liskov Substitution Principle,Interface Segregation Principle dan Dependency Inversion Principle, so tunggu aja gaes updatenya tengkyu..