Menerapkan Konsep MVC di Golang #1

Model View Controller yang biasa disingkat MVC memang selalu menjadi pembahasan yang menarik. MVC sebagai sebuah design pattern yang memisahkan antara controller logic dan view. Inti dari sebuah design pattern adalah supaya nantinya kita dapat membaca dan mengembangkan kode kita dengan mudah. Lalu bagaimana cara menerapkan konsep MVC ini di golang? mari mulai.

Pengenalan ruang lingkup

MVC sebagaimana yang kita tahu memisahkan 3 buah elemen yaitu model sebagai interaktor antara controller dan database. View sebagai interaktor antara controller dan user interface. Controller sebagai jembatan dan penghubung logic utama.

Kita akan mencoba membuat CRUD sederhana yang menerapkan MVC pattern yaitu “manajemen user”. Aplikasi sederhana ini memiliki 4 fitur utama yaitu, menampilkan daftar, membuat, mengubah dan menghapus user.

Dari Kebutuhan tadi, kita akan membuat query untuk membuat field berikut.

  • id integer autoincrement
  • email string
  • name string
  • age int
  • created_at timestamp
  • updated_at timestamp

Setup lingkungan kerja

Pastikan Golang sudah terinstall di local machine masing masing, saya menggunakan Go versi 1.15, bila belum download di situs golang. Setelah itu silakan pilih versi sesuai dengan os masing masing, dan lakukan installasi seperti biasa.

Model mengatur bagaimana sistem berinteraksi dengan data, maka kita perlu Database Management System (DBMS). Kali ini kita menggunakan MySQL.

Buat struktur direktori seperti berikut.

Buat module dengan menjalankan “go mod init github.com/shellrean/mvc”. Maka akan ada file go.mod pada direktori utama.

Membuat kerangka utama

Kita akan menggunakan route tools yang populer milik labstack yaitu echo untuk memudahkan kita manajemen routes yang akan kita buat nantinya.

Initial Connection

Sekarang kita buat file untuk inisialisasi database connection, sehingga kita bisa berkomunikasi dengan database.

Buat file init.go simpan pada folder model. Driver yang kita pakai adalah “go-sql-driver”. Buka file init.go lalu tuliskan kode.

[gist id=”a73bee3adef468d9d195625406f5168f”]

Pada variabel dsn, silakan sesuaikan konfigurasi dengan pada lokal machine masing masing. Dengan format.

dsn := fmt.Sprintf(“%s:%s@tcp(%s:%s)/%s”, “username”, “password”, “host”, “port”, “nama database”)

Pembuatan koneksi ini menggunakan fungsi init untuk menegah multi connection  pada database.

Baca juga: Membuat Authentikasi JWT di golang #1

Model User

Buat file user_model.go lalu simpan pada folder model. Tuliskan kode berikut.

[gist id=”fd6fe77e1b393fda7568e4e2fd61edd1″]

Pada kode diatas kita membuat struct User yang akan kita gunakan sebagai tipe data tabel ‘users’. Pada method Fetch kita hanya akan mencetak text ke console.

Controller User

Buat file user_controller.go lalu simpan di folder controller. Buka file user_controller.go tuliskan kode berikut.

[gist id=”ec7dbc8b2fd3119643357dbf5981df10″]

Pada file ini kita buat 1 method yaitu Fetch, yang mengembalikan echo.HandlerFunc. Pada method ini kita memanggil method Fetch pada user_model.go yang telah kita buat sebelumnya.

Routes Web

Sekarang mari kita buat file web.go lalu simpan di folder route. Buka file lalu tuliskan kode berikut.

[gist id=”ef089e80930b4d33de1f52551dbe3ef7″]

Pada file ini kita membuat fungsi InitRoutes yang digunakan untuk mendafarkan route yang akan kita buat nantinya. Method Fetch pada user_controller akan dipanggil saat endpoint sesuai yaitu GET /users

Main

Waktunya kita buat file utama yaitu main.go, simpan pada direktori utama. Buka main.go lalu tuliskan kode.

[gist id=”333b2cc3abdd1a57f87ee18c52b27deb”]

Kita melakukan pemanggilan fungsi InitRoute pada file route/web.go lalu menjalankan serve dengan pemanggil router.Start. Kali ini kita menggunakan port :9000.

Menjalankan main program

Jalankan go run main.go, bila tidak ada masalah maka serve akan dijalankan, silakan buka browser dengan mengetikan localhost:9000/users.

Seharusnya pada terminal akan menampilkan “Model Telah dipanggil”.

Kita telah membuat kerangka utama yang akan kita gunakan untuk membuat aplikasi crud selanjutnya dalam rangka menerapkan konsep mvc di golang.

Baca Juga: Membuat Custom Error Validation di golang