好吧,這是一個更理論的問題。我有PlayerRepository
。這是一個用於在我的SQLite數據庫上進行操作的類。我實現了有操作,如select
,insert
,update
等如何正確傳遞方法之間的上下文以使用數據庫存儲庫?
public PlayerRepository(Context context) {
super(context, com.fixus.portals.model.Player.class);
open();
}
super
在構造函數的原因PlayerRepository extends Repository
這也是我的課。的Repository
最重要的部分是這樣的一個
public class Repository<T> {
protected static SQLiteDatabase db = null;
protected static MainHelper helper = null;
protected Context context;
private Class<T> type;
public Repository(Context context, Class<T> classz) {
this.type = classz;
this.context = context;
if(helper == null) {
helper = new MainHelper(context.getApplicationContext());
}
}
public static void open() {
if(db == null) {
db = helper.getWritableDatabase();
}
}
}
正如你可以看到,當我創建我打開數據庫,如果沒有之前打開庫。爲此,我需要通過應用程序/活動的Context
。那不是問題。
但有時我想用我的存儲庫在一個活動的一面。在某種需要獲取數據的工具類中。所以,我有,我可以考慮一下
我得到的活動數據,並將其傳遞給我的工具類/方法,所以我不需要它使用存儲庫兩種方式。這不是很靈活
我需要將上下文傳遞給我的工具類/方法。但這意味着每一種手術都需要接受上下文,我不確定這是一種好方法
我是否錯過了什麼?有沒有更好的方法來處理它?
因此,而不是將上下文傳遞到存儲庫以在您的解決方案中創建數據庫連接我應該創建一個類,該類將建立數據庫連接並將其作爲參數傳遞給存儲庫和工具類。我真正理解你嗎? – Fixus
是的。這樣,你把你的插入和獲取查詢的數據庫類,只是調用'myDatabase.myFunction()' – ThomasS
存儲庫是一個數據庫類。每個模型的每個存儲庫。製作一個大型數據庫是不是一個好主意IMO。但是當我將庫與數據庫類結合在一起時,數據庫類將打開/關閉數據庫,並使該對象成爲整個應用程序的全局對象,這樣我就可以編寫獨立的類和工具。這是一個很好的方法 – Fixus