J'ai des classes abstraites que j'utilise comme base pour tous mes modèles. Par souci de simplicité, je ne parlerai que de la classe abstraite racine appelée model - qui doit gérer une opération ORMLite répétitive. Avant chaque opération crud, j'avais besoin d'appliquer une norme logique à tous les modèles. Donc le fait est que je peux implémenter une sauvegarde, une mise à jour et une suppression sur l'objet appelant, sans avoir à répéter le code.Implémentation d'un modèle générique avec une opération CRUD de base à l'aide d'ORMlite pour Android
abstract public class Model<MODEL extends Model, CHILD extends ChildModel> {
private final List<CHILD> mChildren = new ArrayList<>();
private Class<CHILD> mChildClass;
private Class<MODEL> mModelClass;
protected RuntimeExceptionDao<MODEL, Long> mRTEDao;
public Model(Class<MODEL> modelClass, Class<CHILD> childClass) {
this.mChildClass = childClass;
this.mModelClass = modelClass;
this.mRTEDao = App.getOpenHelper().getRTEDao(this.mModelClass);
}
// some codes omitted...
public void save() {
// Do something to the object before continuing
mRTEDao.create(this);
}
public void delete() {
// Do something to the object before continuing
mRTEDao.delete(this);
}
// some codes omitted...
}
Le code me donne ci-dessus une erreur parce que le DAO attend la classe sous « modèle » mais ce fait référence à modèle < MODÈLE, ENFANT >
La solution à ce au moment est le ci-dessous:
// some codes omitted...
abstract protected void handleUpdate(); // Let the subclass handle the create/update
abstract protected void handleDelete(); // Let the subclass handle the delete
public void save() {
// Do something to the object before continuing
handleUpdate();
}
public void delete() {
// Do something to the object before continuing
handleDelete();
}
// some codes omitted...
À tout le moins je réduis le code pour chacun des modèles - mais il ne semble toujours pas élégant. Y at-il un moyen pour moi de saisir l'objet "this" de la sous-classe et non la classe Model de base? J'ai essayé de lancer, mais cela me donne un avertissement que c'est une distribution incontrôlée.
public void save() {
mRTEDao.create((MODEL)this);
}
public void delete() {
mRTEDao.delete((MODEL)this);
}
Ce project par exemple, a une manière élégante pour la classe modèle pour enregistrer, mettre à jour, supprimer sur elle-même. Mais malheureusement, il manque des fonctionnalités dont j'ai besoin dans ORMlite, mais je n'arrive pas à faire ORMlite faire la même chose dans mon projet en raison de la nécessité de générer le modèle de base.