Azwar

Berbagi cerita dan informasi

Tag Archives: PHP

HMVC Design Patern tidak dapat menggantikan Source Code Management

Pada artikel ini saya ingin membahas mengenai Design Patern pada Software Development yang saat ini sedang naik daun, nama Design Patern itu adalah HMVC.

HMVC 结构图

HMVC adalah versi pengembangan dari Design Patern MVC (Model-View-Control). HMVC sendiri adalah singkatan dari Hierarchical Model View Control. Atau bisa kita bilang sebagai versi MVC yang diimplementasikan secara hirarkis. Hirarkis di sini maksudnya adalah hirarki folder (struktur folder) yang mana menjadi modul.

Kuncinya adalah, satu modul memiliki satu MVC, atau bisa dikatan lebih gampangnya adalah, satu modul memiliki masing2 file model, file view dan file controll. Meskipun masing-masing file tersebut tidak selamanya diperlukan, ada kalanya cuma perlu file view dan controll saja.

Contoh: Saya memiliki folder modules folder ini nantinya akan saya gunakan sebagai tempat menaruh modul-modul saya. Oke, sekarang anggaplah saya ingin membuat modul produk, maka saya buat folder produk di dalam folder modules maka struktur foldernya menjadi modules/produk, di dalam folder produk ini akan kita buat folder untuk masing-masing file MVC, dengan kata lain kita akan membuat folder bernama model, view control .

Jika digambarkan, maka struktur hirarki nya akan menjadi sebagai berikut:

-modules/
….|
…+—-produk/
…….|
……+—-model/
……+—-view/
……+—-control/

File-file model akan diletakkan dalam folder model, begitu juga file view dan file control (controller) akan diletakkan ditempatnya masing-masing sesuai nama foldernya.

Keuntungan dari design pater ini, terutama bagi aplikasi web adalah, modularitas file pada aplikasi yang dikelompokkan berdasarkan fungsinya. Contohnya, file-file yang berhubungan dengan produk ditempatkan pada modul produk (file view nya produk, file controllernya produk, dan file modelnya produk).

Maksud dari pengelompokkan folder berdasarkan fungsinya tersebut adalah agar ketika ada tambahan fungsi baru pada program, misal tadi ada fungsi produk kemudian teman kita sudah membuat fungsi user maka kita tinggal mengkopikan modul user yang telah dikerjakan oleh teman kita tersebut pada folder modules/ dengan demikian maka didalam folder modules/ sekarang ada dua folder, yaitu produk dan user. Singkatnya seperti itu.

Sampai tahap ini terlihat simpel dan mudah ketika kita melakukan kerja dalam team. Nyatanya cerita pewayangan, eh salah, cerita software development model HMVC ini belum berhenti sampai disini.

Ketika ada suatu update-an file yang sifatnya tidak spesifik pada modul, maksud saya adalah perubhan diluar folder modul, maka pada saat itu bentrok update-an akan bermunculan. Misalkan saya mengedit file style.css pada folder CSS/, maka ketika ada orang lain yang juga mengupdate file style.css tersebut dan ditimpakan pada folder CSS makan akan menimpa kepunyaan saya tadi. Dengan demikian model kolaborasi ini tidak efektif jika tidak ada komunikasi yang intens, sayangnya, kebanyakan programmer pada umumnya enggan berkomunikasi tentang update-an yang seperti ini. Kebanyakan hanya main replace-replace aja tanpa peduli versi baru file tsb. Akibatnya, ini akan menjadi bencana yang tak akan pernah reda.

Masalah lain yg timbul. Masalah lainnya adalah, jika dalam folder modul kita mengupdate file yang sama. Misalkan si A da si B bertugas mengerjakan module produk pada PC nya masing-masing. Ketika salah satu akan melakukan update source code, maka masing-masing akan saling menimpa file yang telah dibuat. Lagi-lagi tanpa komunikasi dari keduanya maka semua ini hanya akan menjadi spageti monster, alias kodingan yang acak-aduk amburadul. Dan lagi-lagi, kebanyakan enggan untuk berkomunikasi.

HMVC adalah Design Patern, bukan Source Code Management, jadi jangan disamakan fungsinya. Jangan disamakan fungsi Gelas dan Pisau, jenisnya saja beda, yg satu alat untuk minum yang satu alat untuk mengiris. Apalagi kategorinya, gelas teh dan pisau lipat, apa pun kategorinya, keduanya tidak bisa disandingkan untuk dijadikan pengganti. Begitu juga dengan HMVC dengan misalkan GIT atau Mercurial atau sejensnya.

HMVC design patern, tidak bisa menggantikan GIT, Mercurial, SVN dll yang jenisnya adalah Source Code Management.

Saya pernah terpaksa menggunakan HMVC sebagai pengganti Source Code Management, karena ikut aturan main team.

Berdasarkan pengalaman saya HMVC tidak bisa efektif untuk dijadikan pengganti Source Code Management, karena HMVC tidak diciptakan untuk itu dan HMVC pun bukan “itu” (Source code Management).

HMVC = Design Patern
Git, Mercurial, SVN, Bazzar dll = Source Code Versioning
Github, Gitlab, Bitbucket = Source Code Repository untuk Source Code Versioning

Design Patern tidak bisa dibandingkan dg Source Code Versioning
(Design patern itu banyak jenisnya, pada umumnya orang cuma kenal MVC dan HMVC)

Semoga artikel ini berguna. Terimakasih.

Baca artikelnya dulu dari awal paragraf hingga akhir paragraf, baru boleh komentar ya…

Iklan

Tutorial CodeIgniter – Query untuk searching data

Ada sedikit masalah pada CodeIgniter versi 1.7.3 berkenaan dengan Active Record.

Masalah yang saya maksudkan adalah, ketika saya menggunakan fungsi like() pada active record. Fungsi tersebut hanya mau menghasilkan pencarian dengan 1 kata saja. Contoh saya mencari kata ‘aku’ pada kalimat ‘Siapa aku ini’. Dengan pencarian 1 kata tersebut, CodeIgniter (CI) versi 1.7.3 mau menghasilkan query. Namun ketika saya mencari lebih dari 1 kata, misalkan ‘aku ini’ maka resultset nya 0 alias tidak ketemu.

Hmmm…. saya berburu info di internet, tapi tak saya temukan info berguna, mungkin juga saya-nya yang kurang teliti dalam berburu info. Hehe… Yasudah tidak apa-apa, perjuangan tetap berlanjut.

Kemudian, akhirnya saya pake cara jantan, alias cara manual. Biasa lahh… The Power of Simplicity. 😀 Nah itu, kalo sesuatu tidak bisa dihandle oleh hal yang sedikit kompleks, maka cara simpel bisa menjadi obat. Karena simpel itu lah kita bisa memvariasikannya supaya jadi lebih fleksibel. Ups malah ngobrol. Ayo kita selesaikan tutorialnya.

Ya, akhirnya saya menggunkana cara manual. Dengan menggunakan fungsi query($string_query). Yah.. tak masalah, sama-sama query bukan?

Jika menggunakan Active record bentuknya seperti ini:


        	$this->db->like($word, $type);
        	$this->db->or_like($word, $type, 'before');
        	$this->db->or_like($word, $type, 'after');
        	$query = $this->db->get('article'); 

dan dengan menggunakn query manual menjadi seperti ini:

			$query = $this->db->query("
				SELECT *
				FROM `article`
				WHERE `$type` LIKE '%$word%' OR `$type` LIKE '%$word' OR `$type` LIKE '$word%'
			"); 

namun query ini sangat rentan terhadap injeksi,
jadi kita ubah dengan query berparameter, dalam java namanya prepared statement.
Jadinya seperti ini:

        	$sql = "
				SELECT *
				FROM `article`
				WHERE `$type` LIKE '%$word%' OR `$type` LIKE '%$word' OR `$type` LIKE '$word%'
			"; 
        	$query = $this->db->query($sql, array($type, $word, $type, $word, $type, $word,)); 

Perhatikan, parameternya harus urut (urutannya sesuai) dengan yang ada di syntax query.

Semoga bisa menjadi tambahan referensi.
Terimakasih.