2012-04-18 4 views
1

J'ai une classe abstraite User et 3 classes qui s'étendent de cette classe (Admin, Modurator, Lector).Classe abstraite - classes étendues et DAO

Dans ma base de données, j'ai un utilisateur de table avec les données nécessaires (UserName/Password/Security_lvl).

La connexion à la base de données pour l'utilisateur que je fais avec DAO.

public class MysqlUserDao implements UserDao { 
    // 
    private static MysqlUserDao instance; 

    // 
    public static MysqlUserDao getInstance() { 
     if (instance == null) 
      instance = new MysqlUserDao(); 
     return instance; 
    } 
public void create(User user) { 
     try { 
      c = MySqlDAOFactory.getInstance().getConnection(); 
      // 
      String sql = "insert into user values (?,?,?)"; 
      // 
      prest = c.prepareStatement(sql); 
      // 
      prest.setString(1, user.getUserName()); 
      prest.setString(2, user.getPassword()); 
      prest.setInt(3, user.getRole().returnSecurityLevel()); 
      // 
      prest.executeUpdate(); 
      // 
     } catch (SQLException e) { 
      JdbcLogging.info("error item" + " :" 
        + e); 
     } finally { 
      MySqlConnectionFactory.getInstance().closeResultSet(rs); 
      MySqlConnectionFactory.getInstance().closeStatement(prest); 
      MySqlConnectionFactory.getInstance().closeConnection(c); 
     } 
    } 

}

en Java selon le type d'utilisateur que je fais l'administrateur spécifique, des objets Modurator ou Lector je peux utiliser leurs méthodes spécifiques.

Maintenant, le problème que j'ai, c'est que j'ai besoin d'un utilisateur pour ce DAO. Mais l'utilisateur est abstrait et je ne fais aucun objet utilisateur. Je peux faire trois DAO différents pour chacune des autres classes mais ils feraient juste la même chose. Y a-t-il un moyen propre de faire cela ...

Leur peut-être est une solution simple mais je ne la vois tout simplement pas.

+1

Je ne vois pas le problème: tous les champs que vous voulez stocker dans la base de données sont de toute façon définis dans 'User'. Ou est-ce la direction inverse qui cause le problème? – biziclop

+0

Avec create je dois donner un objet User avec lui ... mais je ne peux pas parce que je ne fais pas d'objets User mais des classes étendues à partir de l'utilisateur. –

Répondre

3

Vous pouvez transmettre des instances Admin, Moderator ou Lector en tant que paramètres à votre méthode create. Polymorphism en Java permet ce genre de comportement.

+1

En fait, c'est l'essence même du polymorphisme. – biziclop

+0

vrai, stupide de ma part ... de toute façon, thx –

Questions connexes