Wednesday, March 23, 2011

vaccine framework example - preview 2 (create customer)

Salam kepada Datuk T :) sempena hari porno se1Malaysia

Ok untuk meneruskan kerja jahat, opps kerja baik dari entry part 1 , saya akan tunjukkan contoh dan bukti bagaimana hendak menggunakan vaccine framework dimana anda akan start dengan pengalaman baru cara DCI + CQRS + ES(Event Sourcing) di combinekan.


Demo nie dalam ASP.Net MVC3. Aku create simple web solution dan didalam folder Models aku perlu create 6 folder iaiatu:

1. Commands
2. Domains
3. EventHandlers
4. Events
5. Reports
6. RoleHandlers

Imej seperti dibawah ini.





1. Create Customer class object
Aku akan tulis first code iaitu customer class didalam folder Domains/Customers



Perhatikan ada beberapa perkara penting aku perlu letak didalam class Customer. Pertama aku perlu extends AggregateRoot, ini adalah penting untuk framework execute function replay apabila load object dari storage. So convention ini juga menunjukkan Customer adalah AggregateRoot dan aku juga perlu implement IRolePlayer untuk membolehkan Customer untuk host apa-apa role yang diberi semasa runtime execution selagi mengikut role contract, very flexible dan dynamic.

2. Create command
Berikutnya, aku perlu tulis command class untuk digunakan sebagai message dari client ke server seperti ini. Tiada yang istimewa cuma perlu di extends ke command. Command akan digunakan di client sebagai mapping user mental model yang mengandungi maklumat dan operation yang hendak dilakukan.



3. Create Role
Selepas aku dah create domain(aggregateroot) dan juga command, seterusnya aku kena define Role. Role antara element yang penting/core dlm vaccine framework, dimana Role ini boleh sahaja dishare antara domain object yang lain dengan syarat domain object yang lain memenuhi contract RoleMethod. Contoh Role dalam demo app nie seperti berikut ini.



Self ialah keyword yang akan map balik kepada AggregateRoot so dalam kes ini Self ialah Customer.Self akan ada method CreateNewCustomer(c.Name,c.CashBalance), then perhatikan balik dalam code Customer diatas, dimana dalam method tersebut, kita hanya akan hasilkan event apabila method tersebut berlaku. Event tersebut akan diletakkan dalam method Apply iaitu salah satu method dalm vaccine framework berfungsi untuk store event kedalam event source dan eventsnapshot source, selain dari itu reporting component juga berada dalam Apply method. Event yang dihasilkan dalam process CreateNewCustomer ialah NewCustomerCreatedEvent. Code NewCustomerCreatedEvent adalah seperti ini.



4. Masukkan reporting


Seterusnya, apabila event tadi terhasil, selain dari disimpan kedalam event source dan juga eventsnapshot source, bahagian report juga untuk read process akan juga berlaku. Aku perlu create bagaimana report yang aku ingin keluarkan, report boleh digunakan untuk view di screen. So aku tidak perlu lagi ada join table, sebalinya setiap view UI akan ada report masing-masing.



EventHandler yang mengawal samaada update atau create new report ialah seperti ini



Aku akan tunjuk, rupa eventsnapshot source dan customerreport datasource.

EventSnapshotSource


CustomerDetailReport



Ringkasan

Ini adalah preview simple bagaimana menggunakan vaccine framework. InsyAllah akan buat demo dengan scenario yang lagi complex selepas ini.

0 comments: