Apabila design domain model menggunakan Domain Driven Design pattern seperti Aggregate Root, Service , penggunaan pattern ini hanya valid pada process yang melinatkan command sahaja. Pattern ini pula dikenali sebagai CQS - Command Query Separation (Arhitecture Level). Jadi untuk list/search atau reporting rules DDD tersebut tidak diguna pakai. Anda free untuk search dari mana-mana entity.
Friday, August 28, 2009
Monday, August 24, 2009
Keperluan melakukan refactoring
Refactoring dikategorikan sebagai seni, sama juga dengan Domain Design, memerlukan kreativiti dan kesabaran untuk mendapat keputusan yang bagus.
Posted by ryzam at 8:44 PM 0 comments
Tuesday, August 11, 2009
Message boleh jadi Command atau Event
Bila buat naming method menggunakan message sebagai parameter ada 2 jenis message yang boleh digunakan
Posted by ryzam at 1:54 AM 0 comments
Monday, August 10, 2009
Naming Code yang mudah dibaca dan maintain
Macam mana nak buat naming method yang mudah dibaca dan apabila melihat naming tersebut terus boleh faham apa sebenarnya kerja yang akan dibuat oleh code tersebut. Kebaikan pada naming method yang difahami jelas maksud memudahkan untuk baca dan juga maintain.Code tersebut juag tidak perlu banyak comment.Selain dari itu jika berbincang dengan team developer yang lain naming menggambarkan situasi sebenar real world. Naming yang bagus ialah yang follow Ubiquitous Language semasa dicussion dengan subject matter expert didalam process design domain model.
Contoh -
1. Customer can request license with existing license as a parent license.
2. Customer can request license as a new license
Dulu code yang aku tulis ada seperti ini dibawah ini.
public void RequestLicense(int number,string location,Guid parentLicenseId)
{
...
}
public void RequestLicense(int number,string location)
{
...
}
Bila aku tengok balik code macam nie selepas 2 /3 bulan aku susah nak dapat tahu maksud code tersebut jika dilihat hanya pada naming method.
Aku baru sahaja bertukar cara naming code menggunakan konsep "Message". So secara basic naming code kemungkinan sama tetapi parameter akan berubah dari individual type kepada Message yang akan menggandungi parameter2 tersebut.
public void RequestLicense(CreateNewLicenseWithExistingParentLicense msg)
{
...
}
public void RequestLicense(CreateNewLicense msg)
{
...
}
Posted by ryzam at 5:06 PM 0 comments