2011-02-15 63 views
14

使用Dao模式使用ContentProvider是正确的。 ?或者它会带来任何性能问题?Android - 使用Dao模式和contentProvider

我会尽力解释。我有一个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(); 

} 
....} 

你觉得呢?

关于

回答

34

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

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

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

+0

我认为这取决于你的应用有多复杂。对于包含大量模型和数据库表的更复杂的应用程序,我会推荐一个与内容提供者协同工作的附加DAO API层(针对每个模型)。否则,你最终会得到一个内容提供者,它只能让你部分地在那里(就DAO而言),或者你最终得到一个大量的内容提供者,并且有很多额外的逻辑把它扩展到1000行代码。我使用DAO API层基本上使我总是只为我需要传递模型的每个方法创建一个CRUD类似的方法。 – Bourne 2016-09-30 15:49:01