I'working w aplikacji db z ORmlite, mój model jest tak:Czy to dobrze mieć DatabaseManager z wszystkimi funkcjami ze wszystkich obiektów modelu?
MDL obiektu ..
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;
}
}
Więc moje pytanie brzmi, czy to dobrze mieć DatabaseManager ze wszystkich funkcji ze wszystkich model obiektów, takich jak:
listCarById(int id)
listPlaneById(int id)
removeCar(int id)
removePlane(int id)
Etc .....
I właściwie nie ma problemu z lokalnie buforowanymi instancjami DAO. Szukanie ich w DaoManager wymaga stworzenia obiektu i nie widzę żadnej kary. Jest to wzorzec, którego używają wszystkie przykładowe obiekty. – Gray
ok, połączenie init i getInstance wygląda ładnie! Ale nie jestem pewien, aby umieścić wszystkie funkcje modeli w jednej klasie, czy lepiej byłoby stworzyć kolejne DAO, które rozszerzają interfejs o niektóre popularne metody? ale nie jestem pewien jak to może być ... Jestem trochę zdezorientowany – skabo
Zobacz moją zaktualizowaną odpowiedź. – wsanville