android

时间:2015-09-08 07:54:59

标签: java android circular-dependency

我在从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);
       }

    }

由于

1 个答案:

答案 0 :(得分:1)

我希望了解您的问题/系统架构。

无论如何,只需定义一个DataBaseObject接口,由您将在数据库中编写并由数据库使用的对象实现。

通过这种方式,您可以从类/库中导入接口,但只有DataBaseObject将具有指向数据库的直接指针,而不是反之亦然。