我在从andriod代码访问我的数据库层时面临一种情况。我有我的应用程序项目,对于数据库,我创建了一个内部库,负责数据库操作。
我有一个从DB层公开的接口,它由DB库中的DB管理器类实现。
该接口具有与常见SQL操作相关的方法,例如insert,select etc.
现在,当我调用其中一种方法将数据从应用程序传递到DB库时,我想在对象上执行此操作。在我的例子中,我有一个公共基类,所有Model类都从该基类继承。
然而,当我尝试在我的数据库接口中添加一个方法,该方法将此基础对象作为参数时,android studio会抱怨循环依赖。
目前,我可能会使用Map或其他一些数据结构向我的数据库库发送数据或从数据库接收数据。但是,我想以标准方式解决这个问题。
我知道我必须要做的事情与依赖倒置原则有关,但我只是没有暗示我如何通过使用抽象来使我的耦合松散。
有人可以给一些提示继续前进吗?
接口:
public interface DbItf {
public void close();
//For country table
public Map<String,String> selectCtrs(Context m_context, String qry);
long saveCtrList(Map<String, String> ctrMp, String qry, Context appContext);
}
相反,我想这样做:
public interface DbItf {
public void close();
//For country table
public List<MyObject> selectCtrs(Context m_context, String qry);
long saveCtrList(List<MyObject>, String qry, Context appContext);
}
我的应用项目模型类通过以下方式访问此接口:
@Override
public long saveToLocal(String qry) {
AppCtrl.getInstance().initDB();
long retc = 0;
retc = AppCtrl.getInstance().getQeeDbItf().saveCtrList(AppCtrl.getInstance().getCtrMp(), qry, AppCtrl.getInstance().getAppContext());
return retc;
}
@Override
public void openFrmLocal(String qry) {
AppCtrl.getInstance().initDB();
Map<String,String> locMp = AppCtrl.getInstance().getQeeDbItf().selectCtrs(AppCtrl.getInstance().getAppContext(), qry);
if (locMp.size() > 0 ) {
Log.d("openFrmLocal", "" + String.valueOf(locMp.size()));
AppCtrl.getInstance().setCtrMp(locMp);
}
}
由于
答案 0 :(得分:1)
我希望了解您的问题/系统架构。
无论如何,只需定义一个DataBaseObject接口,由您将在数据库中编写并由数据库使用的对象实现。
通过这种方式,您可以从类/库中导入接口,但只有DataBaseObject将具有指向数据库的直接指针,而不是反之亦然。