Setiap mengerjakan aplikasi dengan Java EE, gw selalu terbiasa menerapkan layer untuk
- Model atau domain sistem seperti, User, Group, Departement, dsb tergantung ruang lingkup aplikasi
- Data Access Object atau biasa disingkat DAO, untuk menenkapsulasi akses database terhadap domain sistem misalnya UserDao untuk operasi getAllUser(), findUserById(), saveUser(), deleteUser() dsb
- Service layer untuk mengenkapsulasi berbagai macam Dao ke dalam satu service agar mudah digunakan dari sisi client (bagian lain dari aplikasi yang mengakses kode kita), misalnya UI atau antar muka
- UI layer untuk logika2, validasi, dan flow yang bersifat interaksi dengan user
Concern gw adalah semakin banyak atau kompleks model atau domain sistem, biasanya Dao pun akan semakin banyak dan gw cenderung melakukan hal yang sama untuk hal2 kecil dan remeh, contohnya method untuk save user dan find user (menggunakan HibernateDaoSupport dari Spring),
public class UserDaoHibernate extends HibernateDaoSupport implements UserDao {
public void save(User user){
getHibernateTemplate().saveOrUpdate(user);
getHibernateTemplate().flush();
}
public User findUser(Integer id){
final User user = (User) getHibernateTemplate().load(User.class, id);
getHibernateTemplate().initialize(user);
return user;
}
}
Kalo gw mau buat Dao untuk Group ya gw lakukan hal yang sama dengan mengubah User menjadi Group dan seterusnya. Ini jelas tidak mengikuti prinsipnya pragmatic programmer DRY (Dont Repeat Yourself), solusinya adalah dengan menggunakan konsep Generic dari Java 5, yang perlu gw lakukan cuma declare class GenericDao dan setiap Dao akan extends kelas ini. Kode diatas akan menjadi,
public class UserDaoHibernate extends GenericDaoHibernate<User, ID extends Serializable> implements UserDao {
}
oh mau buat dao untuk group? gampang!
public class GroupDaoHibernate extends GenericDaoHibernate<Group, ID extends Serializable> implements GroupDao {
}
Konsep GenericDao ini sebenarnya sudah cukup lama dipulikasikan, namun karena sekarang lagi booming Spring 2.5, gw akan coba sharing GenericDao dengan Spring 2.5 + Hibernate dan meminimalisir jumlah konfigurasi yang ada di xml untuk dipindahkan ke source code. Gw ga bilang konfigurasi di xml itu jelek, tapi menurut gw ga semuanya harus ada di xml dan berikut ada post yang menarik mengenai konfigurasi dengan XML vs annotation. Anyway post ttg spring 2.5 juga dibahas oleh Endy Muhardin untuk akses ke DB dengan JDBC dan akses web.Langsung saja kita bahas ttg GenericDao dengan Spring 2.5 dan Hibernate,
Read the rest of this entry »
Recent Comments