Monday, April 18, 2011

Exercise

Salam

Last week terdapat perbincangan yang panjang berkaitan domain design dan bagaimana cara untuk membolehkan sesuatu design itu fleksible untuk reusable.

Sebelum nie terdapat banyak teknik untuk hasilkan design yang fleksible antaranya ialah dengan mengambil kehendak apa yang perlu diuji untuk dijadikan panduan untuk mancapai objektif. Cara ini dikenali sebagai Test Driven Design (TDD). Kemudian ada juga cara lain seperti Domain Driven Design (DDD) dan normal OOAD.

Okay untuk exercise apa kata kalau kita cuba untuk selesaikan satu requirement yang sebegini.

Satu company menyelia 2 jenis perkhidmatan, dimana setiap perkhidmatan memerlukan operator untuk merekodkan docket.

Docket ini mengandungi maklumat satu atau lebih SubDocket dan SubDocket pula boleh mengandungi satu atau lebih DocketItem.

Maklumat DocketItem pada perkhidmatan yang ditawarkan mempunyai persamaan pada sesetengah property dan mempunyai maklumat yang berlainan pada property yang lain dan dockeitem tersebut mempunyai relation ke product atau service mengikut jenis perkhidmatan. Selain dari itu docketitemB juga memerlukan pengiraan DiscountPercentage.

Saya bagi contoh domain dalam image dibawah. Apa yang penting ialah bagaimana kita boleh menggunakan object yang sama untuk handle requirement sebegini. Dan kemudian kita akana tambah requirement baru dari masa kesemasa. Ada sesiapa yang hendak suggest atau mencuba?


1 comments:

cater said...

Can we just use two different constructors to generate serviceA or productB accordingly?

//ServiceA
public DocketItem(string name, decimal amount, string companyName)
{
Name = name;
Amount = amount;
CompanyName = companyName;
}

//ProductB
public DocketItem(string name, int machineNumber, decimal qcAmount, decimal discountPercentage)
{
Name = name;
MachineNumber = machineNumber;
QCAmount = qcAmount;
DiscountPercentage = discountPercentage;
}