Lapisan DAO "pluggable" biasanya/selalu didasarkan pada antarmuka DAO. Misalnya, mari kita pertimbangkan yang sederhana yang cukup umum:
public interface GenericDAO <T, K extends Serializable> {
List<T> getAll(Class<T> typeClass);
T findByKey(Class<T> typeClass, K id);
void update(T object);
void remove(T object);
void insert(T object);
}
(Ini yang Anda miliki di DAO generik Morphia )
Kemudian Anda dapat mengembangkan beberapa implementasi DAO generik yang berbeda, di mana Anda dapat menemukan bidang yang berbeda (tercermin dalam parameter konstruktor, setter dan getter, dll). Mari kita asumsikan yang berbasis JDBC:
public class GenericDAOJDBCImpl<T, K extends Serializable> implements GenericDAO<T, K extends Serializable> {
private String db_url;
private Connection;
private PreparedStatement insert;
// etc.
}
Setelah DAO generik diterapkan (untuk penyimpanan data konkret), mendapatkan DAO konkret tidak akan sulit:
public interface PersonDAO extends GenericDAO<Person, Long> {
}
dan
public class PersonDAOJDBCImpl extends GenericDAOJDBCImpl<Person, Long> implements PersonDAO {
}
(BTW, apa yang Anda miliki di DAO Dasar Morphia adalah implementasi DAO generik untuk MongoDB).
Hal kedua dalam arsitektur pluggable adalah pemilihan implementasi DAO yang konkret. Saya menyarankan Anda untuk membaca bab 2 dari Apress:Pro Spring 2.5 ("Menempatkan Spring ke dalam "Hello World") untuk mempelajari pabrik dan injeksi ketergantungan secara bertahap.