Cara Memisahkan Business Logic: Biar Kode Gak Berantakan
Pernah nggak sih kamu buka kode proyek lama, terus bingung sendiri lihat campur aduknya? Ada logika diskon, query database, sama tampilan HTML jadi satu dalam satu file. Duh, pusing! Nah, masalah ini biasanya muncul karena kita lupa memisahkan business logic dari lapisan lainnya.
Apa Itu Business Logic?
Business logic itu inti dari aplikasi. Isinya aturan-aturan spesifik yang membuat aplikasi kamu unik. Contoh: “Kalau total belanja > 100rb, dapat diskon 10%”, atau “Kalau user sudah login, baru bisa akses halaman admin”. Ini beda dengan kode yang ngurus tampilan (UI) atau ngobrol sama database.
Kenapa Harus Dipisah?
Coba bayangin kamu punya warung. Business logic-nya adalah resep dan aturan jualan. Kalau resep dicampur sama catatan stok barang dan desain plang toko, repot kan? Kalau mau ganti resep, plang ikut keubah. Sama di coding:
1. Mudah diubah – Kalau bisnis berubah (misal diskon naik jadi 15%), kamu cukup edit satu tempat.
2. Mudah dites – Logika bisnis bisa diuji tanpa perlu buka browser atau nyambung database.
3. Bisa dipakai ulang – Aturan yang sama bisa dipanggil dari aplikasi web, API, atau background job.
4. Lebih rapi – Developer lain (atau kamu sendiri 3 bulan lagi) bakal lebih paham.
Bagaimana Cara Memisahkannya?
Prinsipnya sederhana: setiap lapisan punya tanggung jawab sendiri. Biasanya kita pakai arsitektur 3 lapis:
– Presentation Layer – Ngurus tampilan (HTML, React, dll). Cuma nampilin data dan nerima input user.
– Business Logic Layer – Di sinilah aturan main. Nggak boleh akses database atau langsung nge-render tombol.
– Data Access Layer – Ngomong sama database. Simpan, ambil, update data. Nggak tahu soal diskon atau validasi.
Contoh Sederhana (Bayangin Pake Python)
Tanpa pemisahan (ngaco):
“`python
def beli_barang(request):
harga = request.GET[‘harga’]
if harga > 100000:
diskon = 0.1
else:
diskon = 0
total = harga * (1 – diskon)
database.save(…) # langsung simpan ke DB
return render_template(‘checkout.html’, total=total)
“`
Semua jadi satu fungsi. Susah dites, susah diubah.
Dengan pemisahan (rapi):
Buat file khusus `business.py`:
“`python
def hitung_diskon(total_belanja):
if total_belanja > 100000:
return 0.1
return 0
def hitung_total(harga, diskon):
return harga * (1 – diskon)
“`
Buat file `data.py`:
“`python
def simpan_transaksi(data):
# simpan ke database
pass
“`
Buat file `views.py`:
“`python
from business import hitung_diskon, hitung_total
from data import simpan_transaksi
def beli_barang(request):
harga = int(request.GET[‘harga’])
diskon = hitung_diskon(harga)
total = hitung_total(harga, diskon)
simpan_transaksi({‘harga’: harga, ‘diskon’: diskon})
return render_template(‘checkout.html’, total=total)
“`
Nah, sekarang kalau aturan diskon berubah, cukup edit `hitung_diskon` doang. Tes juga bisa fokus ke fungsi itu tanpa perlu ribet pake request atau database.
Tips Praktis Mulai Sekarang
1. Jangan campur query SQL dalam view – Pindahkan ke file terpisah atau gunakan ORM dengan repository pattern.
2. Buat service layer – Punya satu modul khusus yang berisi fungsi-fungsi bisnis. Panggil dari mana pun.
3. Gunakan dependency injection – Misal fungsi bisnis nerima parameter objek database dari luar, bukan bikin koneksi sendiri.
4. Test dulu logikanya – Setelah dipisah, kamu bisa unit test fungsi `hitung_diskon(50000)` apakah return 0, lalu `hitung_diskon(150000)` return 0.1.
Kesimpulan
Memisahkan business logic bukan cuma soal tren atau ikut-ikutan arsitektur. Ini soal membuat kode kamu lebih siap tempur saat bisnis berkembang. Mulai dari proyek kecil sekalipun, biasakan pisahkan aturan bisnis dari yang lain. Ibarat masak, bumbu (logika) jangan dicampur sama piring saji (tampilan) atau kulkas (database). Nanti repot sendiri.
Selamat mencoba, dan semoga kode kamu makin kinclong!