Monday, May 31, 2010

OCP dan Double Dispatch

Salam ILuvIslam

Salah satu kerja yang aku kena buat ialah mencantikkan code. Aku nak shortcut terus kepada point. Code dibawah ada 2 version satu code yang tidak menggunakan OCP dan Double Dispatch, manakala yang satu lagi menggunakan cara yang aku mention.

Sebelum tu aku malas sikit nak beri penerangan OCP (Open Close Principle) dan Double Dispatch boleh search je.. InsyAllah banyak penerangan yang bagus. Cuma akau nak terangkan ialah jika aku tak guna cara OCP dan double dispatch code aku akan menjadi bloated macam ikan kembung.

Kali nie aku kena record transaction sama ada transaction tersebut ialah transaction cash atau cheque atau balance transfer atau atau atau. So atau atau atau lagi tu bermaksud ada kemungkinan lain penambahan jenis transaction. Setakat sebelum 1Malaysia bankrap ada 3 atau 4 transaction yang perlu di rekodkan.

Oleh kerana ada pelbagai transaction, maka user kata mereka hendak tahu total setiap amount apabila transaction itu berlaku di branch dan juga total amount harian untuk setiap transaction. So dengan yakin dan bergaya aku tulis code macam kat bawah nie.





Masalah disedari apabila user bagi tahu 1Malaysia dah bankrap, so ada penambahan transaction yang perlu direkodkan, seperti transaction LPO etc.

So jika dilihat pada code aku kena tambah AddReloadLPO(decimal amount). Ini bermakna aku kena buka file code yang diatas dan tambah, begitu juga pada code class BranchDailyReload aku kena tambah if else pada line 39 AddBranchDailyReload(...).

So macam maner aku tak nak ada penambahan code apada existing class dan juga penambahan if else lagi. Caranya ialah dengan menggunakan OCP dan double dispatch.

Aku refactor class jadi macam nie



Then aku kena tambah interface IReloadOCP dan class yang akan implement, sebagai contoh ReloadCash



Manakala class BranchDailyReload akan berubah menjadi simple macam nie, tiada lagi penggunaan if else, walaupun contoh BranchDailyReload tak follow OCP tetapi penggunaan function lebih explicit. Tiada masalah untuk refactor BranchDailyReload untuk buat fully OCP



Sesiapa ada lagi idea yang lagi okay, silakan.. nak kena submit kat lecturer :)

0 comments: