I'working en una aplicación de DB con ORmlite, mi modelo es la siguiente:¿Es bueno tener un DatabaseManager con todas las funciones de todos los objetos del modelo?
objeto MDL ..
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;
}
}
Así que mi pregunta es, ¿es bueno tener un DatabaseManager con todas las funciones de todo objetos del modelo, como:
listCarById(int id)
listPlaneById(int id)
removeCar(int id)
removePlane(int id)
etc .....
I en realidad no tiene un problema con las instancias DAO en caché local. Buscarlos en DaoManager requiere una creación de objeto y no hay ninguna penalización que pueda ver. Ese es el patrón que usan todos los objetos de ejemplo. – Gray
bien, combinando init y getInstance se ve bien! Pero no estoy seguro de poner todas las funciones de los modelos en una sola clase, ¿sería mejor crear otro DAO que extienda una interfaz con algunos métodos comunes? pero no estoy seguro de cómo podría ser ... Estoy un poco confundido – skabo
Ver mi respuesta actualizada. – wsanville