Kalau di Data Mapper Kita menggunakan sebuah class bantu untuk melakukan operasi - operasi dari class modelnya, misalnya ada 2 buah class , yang pertama class Customer yang cuma berisi property dari Customer dan yang kedua Class CustomerMapper yang berisi methode operasi untuk class Customer. Berbeda dengan Domain Model , dimana sebuah objek memiliki property dan behavior yang jelas seperti ilustrasi dibawah ini:
1 . Domain Model
public class Customer {
// properties
public string FirstName;
public string LastName;
// methods
public bool Save();
public bool Delete();
public Customer Get(int id);
public CustomerCollection Find(Query aQuery);
}
1 . Data Mapper
public class Customer {
// properties
public string FirstName;
public string LastName;
} // Note: no behavior
public class CustomerManager {
public bool SaveCustomer(Customer aCustomer);
public bool DeleteCustomer(Customer aCustomer);
public Customer GetCustomer(int customerID);
public CustomerCollection Find(Query aQuery);
}
Why don't try like this :
3. Fix It
public class Customer {
// properties
public string FirstName;
public string LastName;
public bool Save();
public bool Delete();
public Customer Get(int id);
public CustomerCollection Find(Query aQuery);
}
public class CustomerManager {
public bool SaveCustomer(Customer aCustomer) {
aCustomer.Save();
}
public bool DeleteCustomer(Customer aCustomer) {
aCustomer.Delete();
}
public Customer GetCustomer(int customerID) { // etc. }
public CustomerCollection Find(Query aQuery) { // etc.}
}
So, si Objek Customer gak anemic, ada behaviournya, dan implementasi behaviournya dilakukan oleh CustomerMaanager, jadi gak melanggar kaedah OOP, Object CustomerManager bertindak sebagai facade service si objek Customer , baca POEA nya Martin Fowler.
Perasaan Gua dari dulu belajar OOP kagak kelar-kelar ampe sekarang. Mulai dari belajar bikin class, property, method, event, terus inherit dengan class yang lain, interface, override, overload. Terus gua belajar separasi, bikin layer di aplikasi, gua kira dengan itu gua udah kuasain OOP ternyata jauh banget dari harapan gua. Ternyata ada lagi yang namanya asosiasi, agregasi, composisi dll. Apalagi kalau dah baca bukunya Eric Evans Domain Driven Design, kayaknya gua belum ada apa-apanya deh. Domain Driven Design this is The Real OOP, baca blognya bang Norman deh keren banget. Sekarang lagi belajar DDD dan ternyata hasilnya asyik juga.
Banyak Orang yang keliru design aplikasi di drive dari database, mestinya dari domain baru ke infrastruktur (database). Database design mesti adaptasi ke domain bukan sebaliknya. Fokus dengan domain model anda, ORM such as : nHibernate, IBatis, NEO adalah tools yang support akan hal ini.
Rgrds
ES
Perasaan Gua belum selesai ongprek 2 .Net framework 2.0 udah keluar .Net framework 3.0 dan sekarang udah 3.5 lagi. Oalah , dunia emang udah edan, apa Microsoft yang edan, hehehe. Microsoft terlalu cepat mengeluarkan tekhnologi yang belum orang butuhkan. Well, la problema, dari Jam 9 Pagi sampai jam 9 malam didepan komputer, ngerjain project ama hands on lab terus. Sampai kapan, dont' know, sampai bosen kali ye. Nice stuff in framework 3.5, yeahh but not bad lah