2011-02-15 2 views
14

dao 패턴으로 ContentProvider를 사용하는 것이 맞습니다. ? 또는 성능 문제가 발생합니까?Android - contentProvider와 함께 Dao 패턴 사용

나는 설명하려고 노력할 것이다. 나는 contentProvider를 가지고있다.

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

} 
....} 

당신은 어떻게 생각하십니까 : 활동하는 DAO와 빈 ..

이 코드인가?

관해서는

답변

34

DAO는 데이터베이스에 대한 추상적 인 인터페이스를 제공하도록 설계되었습니다. ContentProvider는 이미이 작업을 수행합니다.

예, 은 DAO API를 제공하기 위해 두 번째 추상화 계층을 만들지 만 ... 모바일 장치에서 프로그래밍 중입니다. ContentProvider API를 직접 사용하는 것이 더 효율적입니다. 이것에 대한 많은 예가 있습니다. 예를 들어 Cursors와 ListView가 얼마나 가깝게 결합되어 있는지 살펴 봅니다. CursorAdapter 클래스를 살펴보면 데이터베이스 커서에서 화면의 목록으로 직접 매핑하는 방법을 알 수 있습니다. ContentObserver를보고 변경된 데이터베이스와 일치하도록 업데이트하기 위해 커서를 푸시 알림하고 ListView의 단일 목록 요소를 업데이트하여 실시간으로 변경되는 데이터베이스를 반영하는 방법을 확인하십시오.

기존 코드를 모두 DAO 모델을 통해 전달하려는 시도를 재발 명하기 위해 엄청난 노력을 기울일 것입니다. 귀하의 신청서를 모르지만, 귀하가 얻는 혜택을 확신 할 수 없습니다.

+0

저는 이것이 앱의 복잡성에 달려 있다고 생각합니다. 많은 모델과 db 테이블을 가진 좀 더 복잡한 앱의 경우, 콘텐츠 공급자와 함께 작동하는 추가 DAO API 레이어 (각 모델 용)를 권장합니다. 그렇지 않으면, 당신은 부분적으로 (DAO의 관점에서) 당신을 얻는 컨텐츠 제공자로 끝나거나, 1000 라인의 코드 라인에 그것을 부풀게하는 많은 여분의 로직을 가진 방대한 컨텐츠 제공자로 끝날 것입니다. DAO API 레이어를 사용하여 기본적으로 모델을 전달할 필요가있는 각 메서드에 대한 메서드와 같은 CRUD를 항상 만들 수 있습니다. – Bourne

관련 문제