Haruskah Validasi di Model?

Haruskah validasi dilakukan di Model (MVC)?

Saya pribadi tidak termasuk yang suka melakukan validasi di model. Kenapa? Saya coba membuat suatu kasus. Kasusnya adalah newsletter.

Ada beberapa pertanyaan jika saya membuat form untuk newsletter.

  1. Haruskah saya menyimpan email tsb?
  2. Bagaimana jika email tsb langsung dikirim ke 3rd party services seperti MailChimp?
  3. Haruskah saya menunggu error yang dikembalikan oleh MailChimp hanya untuk mengetahui email tidak valid?

Kisah di atas bahkan tidak membutuhkan Model. Sehingga lebih masuk akal jika validasi tidak dilakukan di model, tetapi pada saat request diterima, saat itulah request di-validasi.

Bagaimana pendapat anda? :/

 

Iklan

6 pemikiran pada “Haruskah Validasi di Model?

  1. Dulu sempat mempunyai alasan kuat, bahwa validasi di Model membuat lebih efisien, karena tidak ada duplikasi kode. Tapi tapi tapi, semakin ke sini, semakin sadar, bahwa sumber data yang ingin disimpan ke model bisa jadi dari berbagai cara/sumber (dari request, dari internal service, atau yg lainnya). Dan flow bisnis dan kebutuhannya bisa berbeda-beda. Jadi, yup sepakat, sebaiknya validasi dilakukan di request masing-masing.

  2. Ketika bertanya dimana validasi dilakukan, sebenarnya kita juga butuh bertanya konteks dari validasi, apa tujuan dari tiap validasi.

    Validasi proses bisnis bisa jadi berbeda dengan validasi keutuhan data.

    Ambil contoh kasus email di atas. Bisa jadi sebelum email dikirim, ada validasi tahap pertama apakah email yang dimasukkan menggunakan domain email yang hanya hidup sesaat. Proses ini bisa dijalankan di client side kalau mau, atau di server side dengan menaruhnya pada fungsi tersendir, dsb.

    Hasil email dari proses validasi di atas bisa dianggap valid untuk kemudian mengirim newsletternya. Bila ternyata salah satu email itu invalid (dapat laporan dari mailchimp, dsb), maka bisa jadi kita pasang proses tambahan untuk menindaklanjuti invalid emails dari laporan mailchimp. Entah secara otomatis dimasukkan ke blocked list, dsb.

    Jadi bagi sebuah aplikasi yang menggunakan MVC, apakah validasi di M atau tidak, kita kembalikan ke konteks validasi tadi, dan memasang validasi yang lebih tepat di tempat yang tepat.

  3. Bagi saya alasannya lebih sederhana, Satu bagian mengerjakan bagiannya sendiri, atau pendekatan saya dalam membagi permasalahan besar menjadi permasalahan lebih kecil. Saya pikir karena itulah saya sangat menyukai pendekatan Laravel dengan Request nya, saat request masuk maka secara ‘otomatis’ akan melakukan proses validasi berdasarkan rules yang telah kita buat, kemudian saat rules berhasil lewat maka akan masuk ke dalam proses penyimpanan.

    Di sini kemudahan itu datang, karena saya yakin bahwa data yang masuk sudah di validasi, maka saya tinggal berpikir untuk logic menyimpan yang, terkadang, lebih ruwet daripada proses validasi (ex: menyimpan data dan melakukan proses pencatatan data lain berkaitan dengan data yang disimpan dll) …

  4. Saya lebih memilih untuk meletakan validasi di middleware, selain lebih responsive, juga dari segi secutiry dan architecture memang lebih baik jika validasi ada di bagian middleware. Dari semua project yang saya bangun, saya selalu meletakkan validasi, permission, role, security checking di middleware. Dengan konsep middleware ini, kode kita lebih clean dan tertata dengan baik.

    1. Saya kira ini hal yang berbeda. Validasi yang saya maksud adalah hasil input dari user. Misalnya dia mengisi suatu form, lalu tekan tombol submit. Bukan validasi di authentication dan authorization.

Tinggalkan Balasan

Please log in using one of these methods to post your comment:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s