I'working sur une application db avec ORmlite, mon modèle est comme ceci:Est-il bon d'avoir un DatabaseManager avec toutes les fonctions de tous les objets du modèle?
objet .. LDM
DatabaseTable(tableName = "UserCars")
public class CarMDL
{
@DatabaseField(generatedId = true)
private int _id;
@DatabaseField(columnName = "name")
private String _name;
//................. etc
}
// DB Helper class...
public class DatabaseHelper extends OrmLiteSqliteOpenHelper
{
private Dao<CarMDL,Integer> _carDao = null;
@Override
public void onCreate(SQLiteDatabase database,ConnectionSource connectionSource)
{
try
{
TableUtils.createTable(connectionSource, CarMDL.class);
} catch (SQLException e)
{
throw new RuntimeException(e);
} catch (java.sql.SQLException e)
{
e.printStackTrace();
}
}
public Dao<CarMDL, Integer> getCarDao()
{
if (null == _carDao)
{
try
{
_carDao = getDao(CarMDL.class);
}catch (java.sql.SQLException e)
{
e.printStackTrace();
}
}
return _carDao;
}
}
// DatabaseManager class...
public class DatabaseManager
{
static private DatabaseManager instance;
private DatabaseHelper helper;
static public void init(Context ctx)
{
if (null == instance)
{
instance = new DatabaseManager(ctx);
}
}
static public DatabaseManager getInstance()
{
return instance;
}
private DatabaseManager(Context ctx)
{
helper = new DatabaseHelper(ctx);
}
private DatabaseHelper getHelper()
{
return helper;
}
// All the Dao functions of all MDL objects are in this class, for example:
public List<CarMDL> getAllCars()
{
List<CarMDL> carLists = null;
try
{
carLists = getHelper().getCarDao().queryForAll();
} catch (SQLException e)
{
e.printStackTrace();
}
return carLists;
}
// This is another MDL object..
public List<MarkMDL> getAllMarks()
{
List<MarkMDL> marks = null;
try
{
marks = getHelper().getMarkDao().queryForAll();
} catch (SQLException e)
{
e.printStackTrace();
}
return marks;
}
}
Ma question est, est-il bon avoir un DatabaseManager avec toutes les fonctions de tous les objets modèle, comme:
listCarById(int id)
listPlaneById(int id)
removeCar(int id)
removePlane(int id)
Etc .....
I En fait, vous n'avez pas de problème avec les instances DAO mises en cache localement. Les regarder dans le DaoManager nécessite une création d'objet et il n'y a pas de pénalité que je puisse voir. C'est le modèle que tous les exemples d'objets utilisent. – Gray
ok, en combinant init et getInstance semble agréable! Mais je ne suis pas sûr de mettre toutes les fonctions des modèles dans une seule classe, serait préférable de créer un autre DAO qui étend une interface avec des méthodes communes? mais je ne suis pas sûr comment cela pourrait être ... Je suis un peu confus – skabo
Voir ma mise à jour de réponse. – wsanville