Domain Model VS Data Mapper
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.