「プラグ可能な」DAOレイヤーは、通常/常にインターフェイスDAOに基づいています。たとえば、非常に一般的な単純なものを考えてみましょう。
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);
}
(これは、モルフィアの一般的なDAO )
次に、さまざまな一般的なDAO実装を開発できます。ここでは、さまざまなフィールド(コンストラクターパラメーター、セッター、ゲッターなどに反映されます)を見つけることができます。 JDBCベースのものを想定しましょう:
public class GenericDAOJDBCImpl<T, K extends Serializable> implements GenericDAO<T, K extends Serializable> {
private String db_url;
private Connection;
private PreparedStatement insert;
// etc.
}
汎用DAOが(具体的なデータストア用に)実装されると、具体的なDAOを取得するのは簡単です。
public interface PersonDAO extends GenericDAO<Person, Long> {
}
および
public class PersonDAOJDBCImpl extends GenericDAOJDBCImpl<Person, Long> implements PersonDAO {
}
(ところで、モルフィアのBasicDAO は、MongoDBの汎用DAOの実装です。
プラグ可能なアーキテクチャの2つ目は、具体的なDAO実装の選択です。 Apress:Pro Spring2.5 の第2章を読むことをお勧めします (「Springを「HelloWorld」に入れる)工場と依存性注入について段階的に学習します。