2011-08-11 2 views
16

비즈니스 논리 및 UI 부분으로 구성된 응용 프로그램을 작성하고 있습니다. BL과 UI 모두에 의해 저장되고 접근/수정되는 데이터가 상당히 많습니다. 대부분의 경우 저장된 데이터의 변경 사항은 UI에 즉시 반영되어야합니다.직접 데이터베이스 액세스와 콘텐츠 공급자 사이를 결정하는 방법은 무엇입니까?

직접 DB 액세스를 사용해야하는지 여부를 어떻게 결정합니까? 콘텐츠 제공자?

주제 (1, 2)에 대한 일부 읽기를 완료했으며이 두 옵션의 차이점을 이해합니다.

등 성능, 코드 개발 및 유지 보수의 난이도, 같은 문제의 다른 측면에 의견을 공유하십시오

답변

18

필자가 작성한 앱에서 학습 곡선을 지나면 ContentProvider를 구현하는 것이 쉽다는 것을 알게되었습니다.

프로 :

  • 없음 외부 종속성.
  • DB 연결주기는 ContentProvider에서 처리합니다.
  • 인 텐트의 활동간에 콘텐츠 URI를 쉽게 전달합니다.
  • CursorLoader를 통한 간단한 배경 쿼리 (또는 자신 만의 롤).

단점 : 당신이 편리한 좋은 예가없는 경우

  • 가 혼란 스러울 수 있습니다.
  • 엔터프라이즈 Java 배경이있는 경우 ORM이 더 익숙 할 수 있습니다.

ContentProvider를 구현하는 방법을 알아 내려고 할 때 Google's I/O 응용 프로그램의 예제 코드를 썼습니다. 결정을 내리기 전에 먼저 프로토 타입을 작성하는 데 1 일을 보내야합니다. 그러면 트레이드 오프의 직접 경험을 얻을 수 있습니다.

+0

감사합니다. 콘텐츠 공급자가 직접 DB 액세스와 비교하여 성능 문제가 있음을 발견 했습니까? – Asahi

+1

@Asahi 콘텐츠 제공 업체는 매우 얇은 추상화입니다. 나는 그들을 사용하여 성능 문제를 보지 못했어요. –

9

IMO : 단일 APK == 지속성 계층을 통해 직접 액세스 할 수 있습니다. 멀티플 APK (자신의 앱이나 다른 앱의 데이터에 대한 액세스를 제공하려는 앱) == 필요에 따라 콘텐츠 제공 업체.

+0

것은이 전 데이터를 공유하고 싶지 않은 가정 해 봅시다 :

는 ** 수정 ** 다음은 모델 클래스에서의 콘텐츠 제공 업체 코드를 생성하는 유틸리티입니다. 개발에 필요한 노력을 예상/비교할 수 있습니까? 유지하다? 가능한 성능 문제? – Asahi

+2

콘텐츠 제공 업체는 필요한 개발 시간, 유지 관리 및 성능에 영향을 미치는 추가 추상 계층입니다. 이러한 요소는 응용 프로그램의 특성과 응용 프로그램의 특성을 비롯한 여러 가지 요소에 따라 달라집니다. 프로그램 제작자. 지속성 레이어를 포함하도록 앱의 문제를 적절히 구분하는 것만으로도 최소한의 노력 만 수행하면 성능 영향을 측정 할 수있는 기준이됩니다. – Earl

+0

감사. 나는 당신의 대답에 동의 할 수 없지만 너무 일반적입니다. 더 자세하게 얘기해 주 시겠어요? 귀하의 경험에 비추어 볼 때, 어떤 앱/기능이 콘텐츠 제공 업체에 적합하고 그렇지 않은지 여부는 무엇입니까? 코더는 두 모델 모두에서 일정 수준의 경험이 있다고 가정합니다. – Asahi

17

ContentProvider를 작성하는 데 더 많은 시간과 노력을 소비하는 것이 좋습니다. ContentProviders는 단지 데이터에 대한 액세스를 공유하는 것이 아닙니다. 장점은

  • 당신은 스레드로부터 안전하지 않은 그 자체로 ContentObservers
  • ContentProviders를 통해 데이터를 듣는 방법이 있지만,
  • 커서 스스로를 주기적으로 업데이트하라는 메시지가 표시 될 수 있습니다 스레드 safetly 쉽게 구현할 수있다 ContentProvider의 최신 버전 notifyChange
  • 비즈니스 계층에 영향을주지 않으면 서 좋은 추상화를 추가 할 수 있습니다. 예를 들면 다음과 같습니다. 애플리케이션에서 Android 연락처를 사용합니다. 내일 (자신의 WebService를 통해) 자신의 연락처를 소개 할 계획입니다. ContentProvider는이 요구 사항을 매우 순조롭게 반영하도록 수정할 수 있습니다.
  • JOIN 테이블은 비즈니스 로직 코드를 어지럽히 지 않고 멋진 디자인으로 아주 잘 표현할 수 있습니다. MediaStore 또는 ContactsContract와 같은 Android ContentProvider를 확인하십시오. CONTENT_URI 정의를 확인하십시오.

전체적으로 ContentProvider는 구현 가치가 매우 뛰어난 Android 개념입니다. 그리고 일단 정의가 이루어지면 더 많은 데이터에 대한 지원을 추가하는 것이 그리 어렵지 않습니다. 그러면 Helper 클래스 또는 비즈니스 로직 클래스에서 데이터베이스 코드를 작성하는 것만 큼 쉽습니다. https://code.google.com/p/mdsd-android-content-provider/

관련 문제