我在从 andriod 代码访问我的数据库层时遇到了一种情况。我有我的应用程序项目和数据库,我创建了一个内部库来处理数据库操作。
我有一个从数据库层公开的接口(interface),由数据库库中的数据库管理器类实现。
该接口(interface)有与常用SQL操作相关的方法,如insert、select等。
现在,当我调用其中一种方法将我的数据从应用程序传递到数据库库时,我想在对象上执行此操作。在我的例子中,我有一个公共(public)基类,所有模型类都继承自该基类。
但是,当我尝试在我的数据库接口(interface)中添加一个将此基础对象作为参数的方法时,android studio 会提示循环依赖。
目前,我可能会使用 Map 或其他一些数据结构来向我的数据库库发送数据以及从我的数据库库接收数据。但是,我想以标准方式解决这个问题。
我知道我必须做一些与依赖倒置原则相关的事情,但我只是没有得到关于如何通过使用抽象来松散这种情况的耦合的提示。
有人可以给一些提示以继续前进吗?
接口(interface):
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);
}
我的应用项目模型类通过以下方式访问此接口(interface):
@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);
}
}
谢谢
最佳答案
我希望已经了解您的问题/系统架构。
无论如何,只需定义一个DataBaseObject接口(interface),由您将写入数据库并由数据库使用的对象实现。
通过这种方式,您可以从两个类/库中导入接口(interface),但只有 DataBaseObject 具有指向数据库的直接指针,反之亦然。
关于java - android中应用程序项目和内部数据库库之间的循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32452195/