Le seul DAO qui vous est donné est celui pour les stylos. Les autres DAOs vous sont laissés en exercice (voir remarque sur les DAOs génériques ci-dessous pour faciliter l'écriture des DAOs liés à différents types d'objet).

Les interfaces indépendantes du type de persistance :

FabriqueDao.java

DaoStylo.java

Les classes pour JDBC :

FabriqueDaoJdbc.java

DaoJdbcStylo.java

Amélioration possibles

DAOs génériques

Pour éviter d'avoir trop de répétitions dans le code dans le cas (le plus fréquent) où il y aurait de nombreux DAOs pour toutes les classes d'objets persistants (ramettes,...), il faudrait ajouter des interfaces et classes génériques qui implémenteraient le plus possible du code commun aux différents DAOs (un DAO par classe d'objets persistants). Les paramètres de type représenteraient le type Java des objets persistants du DAO, et sans doute aussi le type Java de l'attribut qui joue le rôle d'identifiant pour ces objets persistants.

On aurait ainsi :

Et, par exemple, on aurait
public interface DaoStylo extends DaoGenerique<Stylo, String> (ou extends DaoGenerique<Stylo, Long> si on veut utiliser une clé numérique non significative) ;
et
public class DaoJdbcStylo extends DaoGeneriqueJdbc<Stylo, String> implements DaoStylo

L'utilisation des DAOs génériques n'apporte pas une grande simplification pour les DAOs qui utilisent JDBC mais simplifie beaucoup l'écriture des DAOs qui utilisent JPA ou db4o étudiés ensuite dans le cours.

L'utilisation des DAOs génériques vous est laissé en exercice (pour le projet par exemple...).

Configuration de connexion "dynamique"

Prévoir le cas où la configuration de connexion n'est connue complètement que lors de l'exécution. Par exemple, l'utilisateur saisit au clavier le nom de la base de données ou le nom de la machine qui contient cette base.

Le plus simple est de ranger les informations obtenues lors de l'exécution de l'application dans une map (java.util.Map) et de la passer aux DAOs. Pour éviter d'avoir à passer cette information à chaque DAO, il faut prévoir la possibilité de passer l'information à la fabrique abstraite ou aux fabriques concrètes, qui elles-mêmes passeront cette information aux DAOs créés.

Il est aussi possible de prévoir des fabriques de DAOs qui créent des DAOs associés à une autre base de données que la base "par défaut" utilisée par l'application, pour les cas où l'application travaille avec plusieurs bases de données. Une solution peut être de passer en paramètre le fichier de configuration aux fabriques, ou de se servir de la map pour passer les informations de configuration particulières.