Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[JSP/Classes] Probleme conception

2 réponses
Avatar
Samuel
Salut tout le monde,

Voilà, je programme une appli web avec JSP et des classes java, chaque
classe represente une entité de ma base de données, genre la table client a
une classe client. Pour interfacer tout cela avec mes JSP, j'ai créé une
classe intermediaire que je nomme dbHelper, à laquelle je passe des object,
par exemple pour ajouter un client :

instance_dbHelper.InsertClient(instance_client);

Mais, vu que j'ai beaucoup de tables, ce dbHelper devient enorme, donc
j'imagine qu'il va devenir long à instancier, il y a t'il une autre méthode,
sachant que j'hésite à foutre les accès aux bases de données dans les tables
des entités...

J'espère avoir été clair,

Merci d'avance,

je vous embrasse :-)

Samos

2 réponses

Avatar
JScoobyCed
"Samuel"

Voilà, je programme une appli web avec JSP et des classes java, chaque
classe represente une entité de ma base de données, genre la table client
a

une classe client. Pour interfacer tout cela avec mes JSP, j'ai créé une
classe intermediaire que je nomme dbHelper, à laquelle je passe des
object,

par exemple pour ajouter un client :

instance_dbHelper.InsertClient(instance_client);

Mais, vu que j'ai beaucoup de tables, ce dbHelper devient enorme, donc
j'imagine qu'il va devenir long à instancier, il y a t'il une autre
méthode,

sachant que j'hésite à foutre les accès aux bases de données dans les
tables

des entités...



Ben tout ceci se resoud tres simplement:
1. Cree une interface qui contient les signatures des methodes pour
recuperer les infos des tes objets (du style getParameters() qui renvoie un
tableau/Vector des champs de la table concernee, getValues() qui renvoie un
tableau/Vector des valeurs a inserer, etc...)
2. Change tes classes pour qu'elles implementent toutes cette interface (et
donc overrider toutes les methodes declarees dans l'interface)
3. Dans l'Object dbHelper, tu ne devrait avoir qu'une methode par action
(executeUpdate() ou queryTable() par exemple)

<pseudo-code>
public interface DatabaseBean {
public String[] getFields();
public String[] getValues();
public String[] getValuesToUpdate();
public String[] getFieldsToUpdate();
public String getTableName();
}

public class Client implements DatabaseBean {
public String[] getFields() {
return new String[]
{"client_id","client_name","client_email","creation_date"};
}
public String[] getValues() {
/**
--- traitement de donnees ---
**/
return new String[]
{id,name,email,Calendar.getInstance().getDate()};
}
public String getTableName() {
return "Client";
}
... etc pour toutes les methodes
}

public class dbHelper {
public void executeInsert(DatabaseBean dbb) {
String[] fields = dbb.getFields();
String[] values = dbb.getValues();
String tablename = dbb.getTableName();
String sql = createInsertQuery(fields,values,tablename);
executeQuery(sql);
}

public void executeUpdate(DatabaseBean dbb) {
String[] fields = dbb.getFields();
String[] values = dbb.getValues();
String[] fieldsToUpdate = dbb.getFieldsToUpdate();
String[] valuesToUpdate = dbb.getValuesToUpdate();
String tablename = dbb.getTableName();
String sql = createUpdateQuery(fields,values,tablename);
executeQuery(sql);
}
...
}
</pseudo-code>

Avatar
Nico
Samuel wrote:
Salut tout le monde,

Voilà, je programme une appli web avec JSP et des classes java, chaque
classe represente une entité de ma base de données, genre la table client a
une classe client. Pour interfacer tout cela avec mes JSP, j'ai créé une
classe intermediaire que je nomme dbHelper, à laquelle je passe des object,
par exemple pour ajouter un client :

instance_dbHelper.InsertClient(instance_client);

Mais, vu que j'ai beaucoup de tables, ce dbHelper devient enorme, donc
j'imagine qu'il va devenir long à instancier, il y a t'il une autre méthode,
sachant que j'hésite à foutre les accès aux bases de données dans les tables
des entités...

J'espère avoir été clair,

Merci d'avance,

je vous embrasse :-)

Samos




Salut,

Tu peux également regarder ce que donne Hibernate qui gère pour toi
ce que fait actuellement ta classe dbHelper.

-> http://www.hibernate.org/

A+, Nico.