Saturday, June 13, 2009

DDD : Messaging

Konsep messaging banyak digunakan dalam DDDD atau dikenali sebagai Distributed Domain Driven Design. Dalam .Net community setahu aku ada 2 transport application iaitu NServiceBus dan MassTransit. Cuma messaging approach boleh juga digunakan dalam cara Domain Driven Design yang biasa tanpa menggunakan any messaging transport.

Aku tertarik dengan konsep messaging dari segi kekemasan code dan keupayaan code tersebut bila didesign ala messaging. Kalau mengikut DDDD, Domain akan reference/couple dengan messaging structure manakala jika follow DDD, service akan reference/couple dengan messaging structure.

Dalam post kali nie aku nak bawa contoh bagaimana hendak guna DDD dengan messaging iaitu service reference messaging structure.

Aku baru je nak mencuba, so kalau silap bagi tahu.Apa itu message? Kalau ditanya kepada aku apa itu message jawapannya ialah satu set yang mengandungi samaada arahan atau maklumat sesuatu Context. Sebagai contoh context Tunjuk jalan ke Masjid Shah Alam. Maka terdapat arahan dan maklumat yang perlu letakkan didalam message untuk di hantar kepada si penerima. Penerima boleh jadi rakan sekerja, pemandu teksi atau sesiapa yang faham message tersebut. Berdasarkan message tersebut si penerima akan response berdasarkan apa yang diminta dan supporting maklumat.

Message : Tunjuk Jalan Ke Masjid Alam

Arahan : Sila bagi arahan untuk Ke Masjid Shah Alam
Maklumat 1 : Aku sekarang di lokasi seksyen 9 dan destinasi Masjid Shah Alam
Maklumat 2 : Aku nak pergi menaiki kereta

namespace Direction.Services
{
public interface IMessage
{
}

public interface IServiceHandler<TMsg> where TMsg : IMessage
{
void Handle(TMsg msg);
}


public class TunjukJalanKeMasjidShahAlamMenggunakanKereta : IMessage
{
public string from { set; get; }
public string to { set; get; }
}

public class TunjukJalanKeMasjidShahAlamBerjalanKaki : IMessage
{
public string from { set; get; }
public string to { set; get; }
}

public class TunjukJalanKeMasjidShahAlamMenaikiBasikal : IMessage
{
public string from { set; get; }
public string to { set; get; }
}

public class DirectionService :
IServiceHandler<TunjukJalanKeMasjidShahAlamBerjalanKaki>,
IServiceHandler<TunjukJalanKeMasjidShahAlamMenggunakanKereta>

{

#region IShowDirection Members

public void Handle(TunjukJalanKeMasjidShahAlamBerjalanKaki msg)
{
//Send to Domain to calculate and show the possible way
//Direction.FindFrom(msg.from).FindTo(msg.to).With(Transportation.Leg);
}

public void Handle(TunjukJalanKeMasjidShahAlamMenggunakanKereta msg)
{
//Send to Domain to calculate and show the possible way
//Direction.FindFrom(msg.from).FindTo(msg.to).With(Transportation.Car);
}

#endregion


}
}


Code diatas tidak di test dan hanyalah imiginasi sahaja untuk tatapan umum.

Friday, June 12, 2009

DDD : AggregateRoot rules

Salah satu pattern yang tersangat penting dalam Domain Driven Design ialah AggregateRoot. Dan ianya juga adalah pattern yang nampak mudah tapi susah untuk di pilih semasa didesign di dalam Domain Model.

Apa definisi AggregateRoot? Kalau mengikut buku Domain Driven Design dan setelah membacanya aku boleh membuat kesimpulan pemahaman aku sendiri yang pada aku betul, iaitu AggregateRoot ialah anda mengroupkan beberapa entity atau value object kepada sesuatu object entity yang akan menjadi ketua dan object entity ini akan bertindak menjaga sebarang anasir-anasir baik dan jahat dari luar yang menganggu kelompok/komuniti. Ini bermakna jika ada permintaan dari pihak luar yang bukan penduduk dalam komuniti AggregateRoot tadi maka permintaan tersebut perlulah melalui ketua tadi dan si ketua yanag akan memanggil pengikutnya (Aggregate) untuk bertindak dan tindakan yang berlaku adalah diketahui oleh siketua. Ok ini bahasa mudah yang aku nak cerita, bahasa susah korang google lah sendiri.

Kepentingan AggregateRoot jika di design dengan betul, akan mengurangkan keserabutan (complexity).

Rule yang pertama aku follow, developer lain ada rules masing-masing mengikut pemahaman dia orang. Aku pun baru je faham tu pun kekadang salah pilih AggregateRoot. Lagi satu peringatan jika kesilapan memilih AggregateRoot boleh menjadikan design anda menjadi lebih komplex dan aku pernah merasa keperitan ini. Aku akan hanya pilih AggregateRoot bila perlu dan jika tidak perlu aku tak nak buat. Ianya bukan kemestian, cuma memastikan kekuatan design. Sebelum ini 2/3 bulan sebelum ini pemilihan aggregate root macam kemestian tapi apabila dah terjerat baru kutahu langit itu tinggi. Walaupun dari segi turutan dalam design domain model priority AggregateRoot ialah ketiga penting setelah mengenal pasti entity/value object (1) dan relation association antara object(2). Ianya berada ketangga ketiga hitz sepanjang zaman volume 1 kompilasi, tapi kekuatan design banyak berkait rapat dengan AggregateRoot.

Rule aku yang kedua, Aggregate ialah rakyat marhaen dibawah jajahan takluk AggregateRoot. Jika delete AggregateRoot, maka semua Aggregate akan turut sama terkorban dan mengorbankan diri (kes ikut ketua tanpa usul periksa U jump, I jump) mereka ini tidak nak menjadi anak yatim piatu. Dalam erti kata sebenar Aggregate ini tidak bernilai jika tidak bersama-sama AggregateRoot dan mesti ingat nilai ini adalah berdasarkan Context. Contoh nilai berdasarkan context ialah jika anda masuk kekedai Kereta sama ada baru atau terpakai (second hand) , tujuan anda ialah hendak membeli Kereta itu ialah Context, maka bayangan anda ialah sebiji kereta yang normal yang lengkap dengan body, engine, interial dan tayar. Apa perasaan anda jika hendak beli kereta tapi oleh kerana bodynya tidak dijual dan yang dijual hanyalah tayar apakah nilai tayar dalam context awal tadi. Salesman tu mungkin kena baling dengan tayar tu kot. Tapi sebaliknya jika anda dah ada sebuah kereta tapi tayar anda bocor dan perlu diganti, maka jika anda pergi ke kedai service kereta, mekanik tu akan ganti tayar anda bukan ganti kereta anda, disini tayar adalah lebih bernilai mengikut context tayar bocor.

Rule yang ketiga, sebarang kerja yang dilakukan oleh aggregate , maka AggregateRoot perlu memantau agar perkara-perkara tidak senonoh tidak berlaku dalam jagaan dia. Ok ambil contoh Mursyidul Am PAS ialah AggregateRoot bagi Aggregate jemaah PAS, maka sebarang aktivi seperti Unity Goverment ke atau apa, beliau kena tahu dan tegur jika ada pelanggaran berlaku yang merugikan Islam dan Parti, Aggregate tidak boleh buat sesuka hati nak berdua-duaan dengan orang lain. Orang lain dari luar parti perlu berbincang dengan Mursyidul Am PAS kenapa perlu berdua-duaan untuk kebaikan ummah ke atau apa ke. So jika bukti keikhlasan maka Mursyidul Am PAS mugkin ada letak syarat jika anda ingin kawan dengan si Aggregate A dari Terengganu maka syaratnya Islam mestilah didahulukan dan lain-lain syaratnya. Pendekkan cerita katakan lah Mursyidul Am PAS setuju dan berkawanlah si orang luar tadi dengan Aggregate A, dia pun suruh lah bermacam-macam, suruh buat ini dan buat itu dan semasa perkerjaan tersebut dibuat semua informasi tersebut dipantau terus oleh Mursyidul Am PAS dan tiba-tiba dilihatnya orang luar itu suruh Aggregate A menari ronggeng, wah nie dah kes berat , berdasarkan syarat yang dipersetujui maka terdapat pelanggaran syarat maka perkerjaan Aggergate tadi akan dihentikan dan timbul Pop Up Message "Tak Takut Allah ke hehehehe ". Maka tugas AggregateRoot tadi menjaga supaya tidak tercemar Agregate-Agregate yang berada dibawahnya.

Kesimpulan 3 rules yang aku rasa paling hitz yang boleh dijadikan panduan memilih bakal AggregateRoot, walaupun ada rules lain tapi tidak sepenting rules2 ini. Cerita yang dibawa tiada kena mengena dengan yang hidup atau yang mati dan tiada kena mengena dengan isu sekarang.

Selamat beraggregate root - jangan nak rongeng2

Wednesday, June 10, 2009

LHDN hantar surat minta hutang cukai lagi

Aku balik kampung semalam, ambil anak-anak aku yang bercuti kat kampung sempena cuti sekolah dan kerana ada majlis maka-makan sebelah family wife aku, semua adik-beradik wife aku pun balik, so aku pun dikehendaki balik ada surprise.. aku sampai melaka lepas maghrib dan memang surprise bila tengok 2 meja makan ada kat lama rumah, rupa-rupanya ada makan-makan ikan bakar nasi lemak dan yg lagi surprise ada hadiah untuk semua anak-anak dan menantu, Alhamdulillah. Aku sempat balik rumah jengok mak kesayangan aku, sempat melepas rinda pada mak. Kat meja ada beberapa surat atas nama aku, dari LHDN dia orang send surat minta hutang cehhh!!!.. taksiran 2008 walaupun dah ditolak PCB tapi masih tak cukup, so aku dikehendaki bayar lagi RM xxxx, kesilapan aku , ada beberapa resit masa beli buku aku tak simpan.

Sepatutnya cukai nie dia bagi lah diskaun bagi yang tak sokong kerajaan hahahah..., aku kena selesaikan baki tu dalam tempoh 6 bulan..kalau tak jadi kes along kena kurung heheh..so tahun nie aku tengah kumpul semua resit bila beli buku... resit masuk toilet awam pun kalau boleh reduce cukai aku nak masukkan juga.

Anak aku Muhammad 'Umar Hafiy dah botak sama macam rambut aku hehehe..sama handsome macam aku..hahaha.. plan aku nak bawa anak-anak jalan tak jadi..sekarang nie musim H1N1 risau gak nak bawak ke public area.

Sunday, June 07, 2009

UI Design - Field Layout

Aku memang hancur dalam bab design UI, dan aku memang tak suka involve coding dengan UI, maka aku tidak ada banyak pengalaman dari segi User Experience dan lain-lain yang berkaitan dengan UI. Cuma aku tertarik cara UI yang diperkenalkan dalam ruby campus application, bagi aku kemas dan simple.

Boleh tengok example UI dia kat link nie http://www.opensourcerails.com/projects/15435-RubyCampus

Aku ada juga cuba nak buat macam tu saja suka-suka tapi tak sure lah ok atau tak


Car design nie memang lain sikit dar kebiasaan tapi dari segi user adakah cara UI layout macam ini lagi ok? atau konsep 1 column memanjang kebawah macam 37signals punya cara design

atau 2 column design seperti biasa.

Saturday, June 06, 2009

Muktamar PAS 55

Aku jarang nak cerita sangat pasal politik dalam nie..sesekali je, cuma kali nie aku nak ulas sikit pasal Muktamar PAS 55, oleh kerana penganjuran kali nie dekat dengan rumah aku, maka aku dapat ikuti perkembangan dengan lebih kerap selain dari membaca online ulasan2 yang lain dan dah 2 malam berturut-turut aku pergi saner,tapi tak masuk dalam dewan, cuma melihat gerai-gerai dan dengar ceramah free yang dipasang di kedai-kedai. Aku terlibat dalam PAS secara tak langsung sejak dari sekolah, sebab aku tolong arwah bapa buat kerja-kerja amal untuk PAS, aku ingat lagi masa tu hujung tahun 80an aku dah bersekolah menengah tingkatan 3, maner le ada sangat orang PAS kat kampung aku, ada le 2-3 kerat yang aku tahu,yang lain semuanya biru karat.Arwah bapa aku pun aktif selepas bersara.Aku masih ingat masa tu ada ceramah kalau tak silap aku Mat Sabu penceramah dia, yang hadir cuma dalam 20 orang dicampur dengan beberapa batang pokok pisang. So siapa yang sokong PAS kat kampung aku tu kira alien (makhluk asing).

Aku bukan ahli yang berjawatan cuma ahli biasa je sekarang dan tak de plan nak aktif sekadar membantu apa-apa yang perlu masa pilihanraya. Jadi sepanjang tempoh tersebut banyak peristiwa aku lihat dalam PAS, kemenangan, kekalahan dan pelbagai peristiwa suka dan duka.Selepas tahun 1990 apabila kemenangan PAS yang agak cemerlang di Kelantan dan perlantikan Tuan Guru Nik Aziz menjadi menteri besar, ada sedikit perubahan penerimaan di negeri-negeri macam negeri aku Melaka. Ada arus perubahan apabila mereka yang bukan berlatar belakang pendidikan agama tertarik dengan pembawaan PAS yang membawa Islam sebagai moto asas perjuangan. Pada masa itu ketrampilan, ketokohan Ustaz Fadhil Noor begitu jelas, dimana para Ulama dan Profesional saling lengkap melengkapi.Pada masa itu jelas akan perananan masing-masing dan proses tarbiyah yang dijalankan oleh pemimpin pada ketika itu membawa hasil yang digeruni musuh Tiada pihak yang sibuk nak jadi pemimpin sebaliknya takut apabila dipilih.

Kadang-kadang Allah uji dengan kemenengan dan ahli jemaah lupa akan perkara tersebut dan masing-masing sekarang lebih sibuk kepada jawatan dan pertelingkahan seiapa yang lebih patut memimpin ulama ke atau professional. Musuh telah berjaya memasukkan jarum agar ahli-ahli PAS sibuk dengan melabelkan pihak ini dan pihak itu.

Dua-dua pihak juga sama ada profesional dan ulama dalam PAS ada yang patut duduk diam jika tak boleh buat kerja dari memberi kenyataan bodoh yang kemudianya diambil sebagai peluru oleh pihak musuh. Kerja mengketegori sesetengah pihak tergolong dalam golongan tertentu sebenarnnya memberi kesan yang besar. Pemimpin PAS kena tahu itu. Jangan sibuk dengan Kerajaan Perpaduan sahaja, perpaduan dalam PAS kalau tak dijaga akan mengakibatkan usaha untuk bangun semula mendapat keyakinan rakyat marhaen 50 tahun lagi.

Perkukuhkan proses tarbiyah, jika ulama sekalipun tapi tidak turun kepada professional untuk menerangkan adap dalam berjemaah dan asyik mengatakan bahawa mereka sahaja yang layak menjadi pemimpin, aku rasa orang tu tak layak bergelar ulama. Jika dia itu bagus, tidak perlu ada kuota insyAllah ramai perwakilan akan pilih.

Aku masih lagi tak faham sesetengah pemikiran orang berjawatan dalam PAS yang tak nampak priority mana dahulu yang perlu diselesaikan dari sibuk nak berdialog dengan UBN. Keputusan dah ramai tahu so harap yang diberi amanah tu pikul tugas dengan sebaik-baiknya , jangan hampakan orang-orang yang menyanyangi kerja kebaikan ini.

Tuesday, June 02, 2009

Msc Malaysia Open Source Conference 2009

Agak terbatas waktu untuk aku update latest news etc. 2 hari aku hadiri seminar Msc Malaysia Open Source Conference 2009 di Berjaya Convention Center dengan tema Open to Change.

Aku rasa nie pertama kali aku hadiri event besar untuk open source dan tiada beza dengan seminar yang biasa aku hadiri anjuran Microsoft, suma dalam MS Tech Ed, free gift tu lagi banyak, tanya soalan pun boleh dapat ipod/baju. Aku memang jarang nak bertanya soalan pada speaker cuma masa Presentation Adempier ERP aku bertanya soalan kenapa team beliau tidak menggunakan ORM yang strong lebih-lebih lagi app tersebut di develop dalam Java, so kebiasaanya Hibernate akan menjadi pilihan, tapi bila dia demo dan tunjukkan sedikit code java, aku nampak ada command SQL dalam code. Jawapannya dari awal project nie dah di develop sedemikian rupa dan line of code/features/module dah besar banyak dan untuk mereka port semua dataaccess function kepada Hibernate akan ambil masa yang lama dan Unit test mereka tidak sekuat untuk menahan gegaran refactoring.

Lain-lain session yang aku masuk ialah OpenID/AOuth, Moodle Tips. Ada beberapa keynote dari Google team members. Makanan memang best A+, aku paling puas hati tentang makan.