Android - 将 Dao 模式与 contentProvider 一起使用

Posted

技术标签:

【中文标题】Android - 将 Dao 模式与 contentProvider 一起使用【英文标题】:Android - Using Dao Pattern with contentProvider 【发布时间】:2011-06-27 20:25:50 【问题描述】:

将 ContentProvider 与 dao 模式一起使用是正确的。 ?还是会带来任何性能问题?

我会尽力解释。我有一个内容提供者。一个活动,一个道,一个豆..

这是代码:

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】:

DAO 旨在为数据库提供抽象接口。 ContentProvider 已经这样做了。

是的,您可以创建第二个抽象层来提供 DAO API,但是...您正在移动设备上编程。直接使用 ContentProvider API 会更有效率。这方面的例子很多。例如,看看 Cursors 和 ListView 的耦合程度——看看 CursorAdapter 类,你会看到它是如何设计成直接从数据库光标映射到屏幕上的列表的。查看 ContentObserver,看看它是如何设计来推送通知游标更新以匹配更改的数据库,然后更新 ListView 中的单个列表元素以反映该数据库实时更改...

您将花费巨大的精力重新发明***,试图让所有现有代码通过 DAO 模型。我不知道你的申请,但我不确定我是否看到了你从中获得的优势。

【讨论】:

我认为这取决于您的应用程序有多复杂。对于具有大量模型和数据库表的更复杂的应用程序,我会推荐一个额外的 DAO api 层(对于每个模型),它可以与内容提供程序一起使用。否则,你要么最终得到一个内容提供者,但只能让你部分到达那里(就 DAO 而言),或者你最终得到一个庞大的内容提供者,其中包含许多额外的逻辑,使其膨胀到 1000 行代码。我使用 DAO api 层基本上使我能够始终为我只需将模型传递给的每个方法创建一个类似 CRUD 的方法。

以上是关于Android - 将 Dao 模式与 contentProvider 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

将 DAO 模式与 ORM 系统一起使用是不是有意义? [关闭]

Android Jetpack ROOM 的Dao返回LiveData<Bean>封装及Bean普通的区别

与 DAO 模式的对称关系

ORM 和 DAO 设计模式

Android:在列表中搜索与使用 DAO 搜索

与DAO模式的对称关系