Android - 使用Dao模式与ContentProvider

15

使用ContentProvider与dao模式是否正确?或者它会带来任何性能问题吗?

我试图解释一下。我有一个ContentProvider,一个Activity,一个dao和一个bean...

这是代码:

class Bean(){

 String name;

}

class Dao{

 Activity activity;

 public Dao(Activity activity){

 this.activity = activity;

public List<Bean> getAllBean() {

    Cursor c = activity.managedQuery(Bean.CONTENT_URI, PROJECTION,
                null, null, Bean.DEFAULT_SORT_ORDER);
    return BeanMapper.GetAllFromCursor(c);
    }
}

}

Class Activity{
.....


 onCreate(....){

  Dao dao = new Dao(this);
  List<Bean> aList = dao.getAllBean();

}
....}

你认为呢?

敬礼

1个回答

35

DAO旨在为数据库提供抽象接口,而ContentProvider已经做到了这一点。

是的,您可以创建第二个抽象层来提供DAO API,但是...您正在移动设备上编程。直接使用ContentProvider API将更加高效。有许多示例。例如,请看看Cursors和ListViews如何紧密耦合 - 查看CursorAdapter类,您将看到它是如何设计为直接从数据库游标映射到屏幕上的列表的。查看ContentObserver,并了解其如何设计为推送通知游标以更新以匹配更改的数据库,并反过来更新ListView中的单个列表元素,以反映实时更改的数据库...

尝试让所有现有代码通过DAO模型进行传递,您将花费巨大的努力来重新发明轮子。我不知道您的应用程序,但我不确定您从中获得了什么优势。


1
我认为这取决于你的应用程序有多复杂。对于具有许多模型和数据库表的更复杂的应用程序,我建议使用额外的DAO API层(针对每个模型),该层与内容提供程序一起工作。否则,您要么只能获得部分DAO的内容提供程序,要么就会得到一个庞大的内容提供程序,其中包含大量额外的逻辑,使其膨胀到数千行代码。我使用DAO API层基本上使我能够始终为我需要传递模型的每个方法制作类似CRUD的方法。 - Bourne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接