Account
Inti dari pattern ini adalah sebagai penampung dari accounting entry dan menyediakan summary dari entry tersebut.
Istilah account udh lama ada. Bank Account, Project Cost Account, Corpoorate Chart of Accounts, kebanyakan istilah tersebut melibatkan accounting.
Ada banyak cara sih untuk mengerti account itu apa. salah satunya sebagai container dari entries dari accounting entry. tempat penampungan. pot atau apalah yg bisa menampung. ketika kita membuat entry kita memasukkannya ke dalam suatu account tertentu. Satu Account bisa memiliki banyak entry. Nah dari situ kita bisa ambil kesimpulan bahwa hubungan one to many. Tapi dia bukan hanya container tetapi juga bisa memberikan informasi summary seperti balance.
Bisa juga kita pikirkan bahwa Account tersebut merupakan Audit Log untuk nilai tertentu. Kadang kita bukan hanya butuh nilai balance untuk sekarang aja. Tapi bisa aja untuk suatu waktu di masa silam. Ntah itu kemaren, sebulan yg lalu. Seperti di bank itu loh. Ada historynya. Dan kita juga pengen tau apa2 saja yg terjadi terhadap Account tersebut. Perubahan apa saja yg terjadi. Contohnya di bank. penarikan, pemasukan, transfer dll.
Cara ketiga memikirkan tentang account adalah cara untuk menyambungkan atau menghubungkan seluruh entry yg mendeskripsikan jenis entrynya.
Account itu ga selamanya bank account atau monetary account. Bisa juga digunakan selain uang. Contohnya kulkas. Jika saya punya 24 botol Pocari Sweet di kulkas saya bisa menganggapnya sebagai account. dimana balancenya skarang adalah 24. nah ketika saya mengambil 3 botol minuman dari kulkas. itu dapat dianggap sebagai withdrawel (penarikan) 3 botol minuman. Seperti itulah kira2
Esensi dari account pattern adalah menampung koleksi dari entry dan menyediakan summary dari informasi yg dikandung dari entry tersebut.
Nah biasanya entry yg ada itu kan banyak. Jadi harus dipikirkan lagi cara menghitung balancenya. Nah tergantung dari informasi yg seperti apa yg diinginkan dari account tersebut. Misalnya kita butuh current balance. kita dapat menyimpan nilanya (di cache) di field dan menggunakan entries yg ada untuk menghitung ke nilai sebelumnya.
Nah jika terlalu banyak entry maka kadang kita ga perlu tw terlallu detail lagi. Jadi kita bisa menggantikan sekelompok entry dengan satu entry yg memiliki nilai sama. Jadi ada perwakilannya. Ketimbang banyak2 tapi ga digunakan. Nah datenya merupakan date setelah consolidasi tersebut. Hal ni berarti kita tidak dapat mengambil informasi mengenai detail kejadian pada rentang waktu yg diwakilkan tersebut. Tetapi kita dapat membuat summary entry tersebut menjadi proxy terhadap detail entry.
kita biasanya berharap bahwa entry yg ada pada account memiliki currency yg sama. karena biasanya Account sudah ditentukan currencynya apa. Bisa aja sih dipilih currencynya ketika currency pertama dimasukkan. Tapi jadi lebih rumit.
Nah klo misalnya currencynya berbeda katanya gunakan Money Bag pattern untuk kalkulasi summry. Kata si martin fowler. Saya pun ga ngerti
Sumarry yg kita inginkan dari Account biasanya adalah balance, withdrawels dan deposit pada satu waktu atau pada suatu period.
Gunakanlah accounting pattern jika kita butuh nilai currentnya, nilai history atau nilai sebelum sekarang dan kita juga ingin menyimpan sejarah perubahan dari nilai tersebut.
Analogy dari Account ini sama dengan Version Control System.. Subversion atau SVN dll. Kita bisa menganggap bahwa Account ini adalh SVN untuk uang. Tetapi tetap saja account tersebut digunakan untuk sesuatu yg quantitative. Nah klo di SVN balancenya apa ya ? Source Code. Withdrawal dan Deposit dapat dilakukan terhadap sourcecode. hehehe. jauh sekali ya analogynya
contohnya di java
ini bagian untuk menampung entries
class Account ... private Collection entries = new HashSet(); // entry unique private Currency currency; // memiliki currency yg diset void addEntry(Money amount, MfDate date){ // dapat berupa penambahan atau pengurangan Assert.equals(currency, amount.currency()); entries.add(new Entry(amount, date)); }
bukan hanya sebagai container saja. tetapi juga menyediakan summary
class Account... Money balance(DateRange period) { // menghitung balance pada period tertentu Money result = new Money (0, currency); Iterator it = entries.iterator(); while (it.hasNext()) { Entry each = (Entry) it.next(); if (period.includes(each.date())) result = result.add(each.amount()); } return result; } Money balance(MfDate date) { return balance(DateRange.upTo(date)); } Money balance() { return balance(MfDate.today()); }
bisa juga ditambahkan summary lain yg berkaitan tentang jumlah masuk dan keluar pada waktu atau range tertentu
hahaha…oke wel, mantap lah… aku udah hidup dan mendunia di dunia Rich Internet Application. Tapi untuk yang OOP beginian juga oke juga koq. Tapi sebelum berlangsung terlalu jauh, gimana kita berdua membuat sebuah website yang khusus membahas seperti ini bro? terus untuk langkah awal, kita berdua dulu penulisnya, terus kita invite siapa2 aja yang mau bergabung. Gimana? Ntar kita bikin halaman donasi, bagi siapa saja mau memberi donasi, biar website kita eksis, yah, soalnya kita kan bayar hosting juga toh? terus ntar, kita buat buku yuukk.. lumayan menambah keuangan kita. Ingat suatu hal yang penting dan penting kali bro, programmer juga butuh makan. hahahahahaha… programmer juga punya pacar, programmer juga butuh ke mall.. hahahahaha… bener gak bro? gimana dengan usulku?
well, it`s so extream thinking friends 😀