Tuesday, March 30, 2010

Pilihan untuk kemahiran

Pemilihan language,tools dan methodology/process sama seperti cara untuk buat pilihan pembelian hartanah (rumah/bangunan/tanah), jika pilihan anda tepat dan kena pada masa, insyAllah berbaloi-baloi.

Pemilihan dalam ertikata untuk anda betul-betul mahirkan diri dengan sesuatu yang dipilih, tetapi anda digalkkan untuk mengambil tahu secara asas saingan-saingan yang lain. Anda tidak pelulah terlalu ekstrim dengan sesuatu yang dipilih, tetapi perlulah mempunyai sikap terbuka dalam menerima kritikan terhadap sesuatu yang menjadi pilihan dalam kehidupan software developer.

Memilih untuk mahir sesuatu perkara adalah lebih bagus dari tahu semua benda tapi tiada kemahiran. Memang anda digalakkan untuk sentiasa mempunyai sikap ingin tahu, tapi dari segala keperluan dalam software developement pilihlah 1,2 atau 3 perkara yang anda betul2 mahir - timur barat utara dan selatan.

Untuk aku pula pada masa ini aku invest(masa dan tenaga) untuk mendapat skill dalam 3 perkara. Pemilihan aku ialah mahirkan Domain Driven Design, fahami NHibernate/FluentNhibernate dan juga C# .Net

So bila aku buat target apa yang menjadi keutamaan aku dalam software development aku akan beri tumpuan kepada ketiga-tiga perkara diatas. Jika orang bertanya aku tentang T-SQL aku sekadar boleh beri pendapat tetapi bukan sebagai best practices begitu juga bila ditanya tentang testing framework/approach aku juga boleh bercerita permukaan tetapi tidak mendalam.

Maka pada aku keperluan untuk setkan target dan keutamaan apabila memilih pelbagai technology adalah sama seperti cara apabila hendak buat pembelian hartanah. Buat survey dan research supaya pilihan anda tepat.


Thursday, March 25, 2010

Domain challange

Pagi nie aku dapat artikel update dari Jimmy Bogard tentang
Strengthening your domain: Encapsulating operations

Aku dah baca dan beri comment, guna nick amir (hentam ajelah). Memang menarik cara dia describe problem and cara dia solve dengan cara DDD. Aku cuma tak berapa setuju beberapa domain behavior yang dia design..so aku bagi suggestion aku.. Solution yang dia I bagseperti di bawah.

Customer = new Customer
var fee = customer.ChargeFee(100m);
fee.Amount.ShouldEqual(100m);
customer.Fees.ShouldContain(fee);


Solution aku lak dengan ialah method ChargeFee tu naming dia macam tak kena.
Aku suggest buat macam nie:

Customer customer = new Customer();
ShopOwner s = new ShopOwner();
s.ChargeFeeTo(customer).Amount(100m);
So bila customer tu nak buat bayar


customer.MadePayment(50m);
Dia ada komen balik kata ChargeFeeTo(customer) tidak berapa kena sebab tanpa panggil method Amount(), code boleh compile dan tiada error. Aku setuju konsep explicit design, insyAllah aku akan ulas explicit design (keberkesanan).
Aku suggest supaya amount tu diletakkan sebagai paramater seperti

s.ChargeFeeTo(customer,100m);

Selain dari itu untuk domain yang lebih flexible kita boleh bina domain CustomerFeeCharges (moment interval) so code boleh dibina macam ini

s.ChargeForTo(new CustomerFeeCharges(customer,amount));

Wednesday, March 24, 2010

First screencast bisu

Aku baru je habis buat simple screencast bisu.. hehe..tak de suara tentang basic setup NHibernate & FluentNHibernate. Ini experiment aku , insyAllah kalau ok ada sambungan. Length dia pendek sahaja.. aku cuba buat sesimple, padat dan sendat...

Thursday, March 18, 2010

Fluent Ubiquitous Domain

Aku tak de apa nak cerita banyak cuma nak bagi satu image untuk difikirkan dan dibincangkan , kalau ada yang nak berbincang silakan, kalau tak de anggap lah image itu contribution untuk 1Malaysia hehehe. Untuk design domain model selain dari skill analytics dan experiance, supporting cara untuk menjadikan domain itu lebih valueable ialah apabila anda boleh buat ayat dari domain model tersebut. Normal buka domain model asas nya ialah identify noun sebagai class, verb sebagai operation dan adjective sebagai attribute/property.


Aku tak sure sangatlah part tu secara detail, boleh search kat pakcik google nyer kedai. Cuma apa aku nak tekankan penggunaan nama class yang menggambarkan scenario. Sebab kalau ambil noun sahaja untuk class kenkadang tak berapa nak jelas betulke?... Aitt aku tanya balik soklan...


Wednesday, March 17, 2010

Adakah perlu Query dikongsi??

Ni adalah persoalan yang timbul bila aku buat coding (soft dev). Aku tak jawapan yang concrete tapi buat masa nie aku memilih query tidak perlu di kongsi, setiap client yang ingin data mempunyai query set yang masing-masing. Jika terdapat perubahan pada domain tidaklah terlalu sakit untuk ubah dari kongsi query tetapi bila requirement query untuk process A lari sikit dari requirement untuk process B, aku dapat rasakan lagi susah nak handle. Mungkin sebab aku ambil pendekatan query sepatutnya very lightweight process yang tanpa melibatkan terlalu banyak validation etc.



Tuesday, March 16, 2010

Google public profile

Ini ialah akunyer link ke public google profile - http://www.google.com/profiles/irwanazam , artikel dalam I Look, I See , juga akan dishare dalam Buzz . So ada n3 yang discussion dibuat disitu.

Wednesday, March 10, 2010

Macam mana

Aku tak ade idea nak tulis apa, ada masa sikit sebelum nak sambung buat kerja, aku cuba bawa satu normal scenario dalam software development design. Contoh aku diminta develop online POS (Point Of Sale) untuk pasaraya besar , jadi boleh bayangkan per day transaction memang dijangkakan banyak. Dan normal domain model design ialah seperti ini.



Ok untuk create new order tiada masalah, kita hanya point order as agreegateroot dan yang lain semua dihandle ORM untuk persistence. So apabila sudah selesai, requirement lain ialah hendak list order record per day or per hour etc, seperti tertera dibwah nie. Ambil contoh customer nie berdaftar menjadi member (macam Jusco members card,Giant members card)


So macam mana?, Aku perlu query ke table order join ke customer join dengan orderitem join dengan product dan join dengan price dan result aku akan dapat list macam kat atas tu.


Adakah cara macam tu efficient?.. mungkinlah kot sebab selama nie aku buat cam tu... Habis tu tak de cara lain?.. ntah le ada agaknya tapi nie yang biasa orang buat..so aku follow je

Kalau boleh buat macam nie



Tak banyak kerje ke nak buat lagi satu domain view?.. habis tu kalau requirement berubah dia nak lagi satu column kat view tu macam maner?? kalau dia update order record tadi macam maner lak record kat view tadi...

Siapa boleh tolong bagi pendapat....

Technical Screencast

Salam,


Aku terfikir adakah mendapat sambutan jika terdapat screencast khusus yang dibina untuk market Malaysia, aku bukan tak berminat cerita pasal global, atau pun pasaran luar cuma aku lebih nak fokuskan khusus pada developer yang ada di Malaysia dimana presenter juga adalah Malaysian haaa tu barulah 1Malaysia. Kalau diperhatikan memang terdapat beberapa site yang provide screencast untuk software developement sama ada free atau berbayar. Kandungan screencast yang di siarkan juga memang menarik. Plan aku screencast yang aku nak buat nie berbayar, kerana ianya melibatkan masa dan juga tenaga. Kalau ada satu portal screencast dimana developer boleh provide kemahiran masing-masing dan dapat income dari situ sure menarik. Bagi aku boleh dimulakan dengan kategory developement dan selepas tu kembangkan pada administration linux, windows, unix etc..

Cerita sikit-sikit je lah dulu....dah confirm betul2 baru boleh cerita lanjut..