close
close

controller service repository pattern

2 min read 02-10-2024
controller service repository pattern

Dalam pengembangan aplikasi, pola desain yang baik sangat penting untuk menjaga kebersihan, keterbacaan, dan pemeliharaan kode. Salah satu pola yang sering digunakan adalah pola Controller-Service-Repository. Artikel ini akan membahas struktur dan cara kerja pola ini, serta memberikan contoh implementasi.

Apa Itu Controller-Service-Repository?

Pola Controller-Service-Repository membagi aplikasi menjadi tiga lapisan utama:

  1. Controller: Bertanggung jawab untuk menangani permintaan dari pengguna, memproses data, dan mengembalikan respons.
  2. Service: Berfungsi sebagai penghubung antara controller dan repository, berisi logika bisnis aplikasi.
  3. Repository: Bertanggung jawab untuk interaksi dengan sumber data, seperti database.

Contoh Kode

Berikut adalah contoh kode sederhana menggunakan pola ini dalam aplikasi berbasis Node.js dengan Express dan Sequelize:

// Controller
class UserController {
    constructor(userService) {
        this.userService = userService;
    }

    async getUser(req, res) {
        try {
            const user = await this.userService.findUserById(req.params.id);
            res.json(user);
        } catch (error) {
            res.status(500).send(error.message);
        }
    }
}

// Service
class UserService {
    constructor(userRepository) {
        this.userRepository = userRepository;
    }

    async findUserById(id) {
        return await this.userRepository.getById(id);
    }
}

// Repository
class UserRepository {
    constructor(database) {
        this.database = database;
    }

    async getById(id) {
        return await this.database.User.findByPk(id);
    }
}

Analisis dan Penjelasan

1. Memisahkan Tanggung Jawab

Pola ini memisahkan tanggung jawab setiap komponen, yang membuat kode lebih modular dan mudah dipahami. Controller fokus pada interaksi pengguna, service pada logika bisnis, dan repository pada akses data. Dengan pemisahan ini, setiap komponen bisa dikembangkan dan diuji secara independen.

2. Menggunakan Dependency Injection

Dalam contoh di atas, kita menggunakan dependency injection untuk menyuntikkan userService ke dalam UserController, dan userRepository ke dalam UserService. Ini membuat kode lebih fleksibel dan lebih mudah untuk diuji unit.

3. Praktik Baik

  • Uji Unit: Dengan memisahkan logika bisnis dari kontroler, kita dapat menulis uji unit untuk setiap lapisan tanpa tergantung pada lapisan lainnya.
  • Reusable Code: Service dan repository dapat digunakan kembali di berbagai controller tanpa perlu duplikasi kode.
  • Keterbacaan: Struktur kode yang bersih dan terorganisir memudahkan pengembang baru untuk memahami aplikasi.

Kesimpulan

Pola Controller-Service-Repository adalah praktik terbaik dalam pengembangan aplikasi yang memudahkan manajemen kode dan mempercepat proses pengembangan. Dengan memisahkan tanggung jawab dan menggunakan dependency injection, kita dapat menciptakan kode yang tidak hanya efisien tetapi juga mudah untuk dipelihara. Jika Anda baru memulai dengan pola ini, mulailah dengan proyek kecil dan tingkatkan kompleksitas seiring dengan meningkatnya pemahaman Anda.

Sumber Daya Berguna

Dengan memahami dan mengimplementasikan pola Controller-Service-Repository, Anda akan meningkatkan kualitas aplikasi yang Anda bangun. Selamat coding!

Latest Posts