2011-02-15 62 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