2011-02-15 13 views
14

Es correcto utilizar ContentProvider con patrón dao. ? o traerá algún problema de rendimiento?Android - Uso del patrón Dao con contentProvider

Trataré de explicarlo. Tengo un contentProvider. una actividad, un DAO y un grano ..

este es el código:

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(); 

} 
....} 

¿qué te parece?

respecto

Respuesta

34

DAO está diseñado para proporcionar una interfaz abstracta a una base de datos. ContentProvider ya hace esto.

Sí, puede hacer una segunda capa de abstracción para proporcionar una API DAO, pero ... Está programando en un dispositivo móvil. Usar la API ContentProvider directamente será más eficiente. Hay muchos ejemplos de esto. Por ejemplo, observe qué tan cerca están acoplados los cursores y las vistas de lista: observe las clases CursorAdapter y verá cómo está diseñado para mapear directamente desde un cursor de base de datos a una lista en la pantalla. Mire ContentObserver y vea cómo está diseñado para enviar notificaciones automáticas a un cursor para que coincida con una base de datos modificada y, a su vez, actualice un solo elemento de lista en un ListView para reflejar esa base de datos a medida que cambia en tiempo real ...

Vas a gastar un inmenso esfuerzo reinventando la rueda tratando de obtener todo ese código existente para llevar a través de un modelo DAO. No conozco su solicitud, pero no estoy seguro de ver la ventaja que obtiene de ella.

+0

Creo que esto depende de la complejidad de su aplicación. Para aplicaciones más complejas con muchos modelos y tablas db, recomendaría una capa adicional de API DAO (para cada modelo) que funcione con el proveedor de contenido. De lo contrario, terminas con un proveedor de contenido que solo te lleva parcialmente allí (en términos de un DAO) o terminas con un proveedor de contenido masivo con mucha lógica extra que lo hincha en 1000 de líneas de código. Utilizo la capa API de DAO para, básicamente, permitirme hacer siempre un método CRUD like para cada uno de mis métodos al que solo tengo que pasar el modelo. – Bourne

Cuestiones relacionadas