I'working trên một ứng dụng db với ORmlite, mô hình của tôi là như thế này:Có tốt một DatabaseManager với tất cả các chức năng từ tất cả các đối tượng mô hình không?
MDL đối tượng ..
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;
}
}
Vì vậy, câu hỏi của tôi là, là nó tốt có một DatabaseManager với tất cả các chức năng từ khắp nơi các đối tượng mô hình, như:
listCarById(int id)
listPlaneById(int id)
removeCar(int id)
removePlane(int id)
Etc .....
tôi thực sự không có vấn đề với các phiên bản DAO được lưu trong bộ nhớ cache cục bộ. Tìm kiếm chúng trong DaoManager đòi hỏi một đối tượng sáng tạo và không có hình phạt mà tôi có thể nhìn thấy. Đó là mẫu mà tất cả các đối tượng ví dụ sử dụng. – Gray
ok, kết hợp init và getInstance có vẻ đẹp! Nhưng tôi không chắc chắn để đặt tất cả các mô hình chức năng trong một lớp duy nhất, sẽ là tốt hơn để tạo ra một DAO khác mà mở rộng một giao diện với một số phương pháp phổ biến? nhưng tôi không chắc làm thế nào điều này có thể được ... Tôi là một chút bối rối – skabo
Xem câu trả lời cập nhật của tôi. – wsanville