[android] Android에서 어떤 아키텍처 패턴이 사용됩니까? [닫은]

모바일 플랫폼에 대한 작은 연구를하고 있는데 Android에서 어떤 디자인 패턴이 사용되는지 알고 싶습니다.

예를 들어 iOS에서 모델 뷰 컨트롤러는 위임 및 기타 패턴과 함께 매우 널리 사용됩니다.

Android는 어떤 패턴과 특히 사용합니까?

편집하다

커널, dalvik 등에서 깊이 사용 된 디자인 패턴을 요구하는 것이 아니라 응용 프로그램을 개발하는 동안 응용 프로그램 개발자가 만나는 패턴에 대해 묻습니다.



답변

안드로이드 개발을 위해 MVC ( model-view-controller )와 model-view-presenter 아키텍처 패턴을 모두 사용해 보았습니다 . 내 연구 결과는 모델 뷰 컨트롤러가 잘 작동하지만 몇 가지 “문제”가 있습니다. 그것은 모두 당신이 안드로이드 Activity클래스 를 어떻게 인식하는지에 달려 있습니다 . 컨트롤러입니까 아니면보기입니까?

실제 Activity클래스는 Android View클래스를 확장하지 않지만 사용자에게 창 표시를 처리하고 해당 창의 이벤트 (onCreate, onPause 등)도 처리합니다.

즉, MVC 패턴을 사용하는 경우 컨트롤러는 실제로 의사보기 컨트롤러가됩니다. 사용자에게 창 표시를 처리하고 추가 뷰 구성 요소를 사용하여 setContentView를 사용하여 창에 추가했으며 최소한 다양한 활동 수명주기 이벤트에 대한 이벤트도 처리합니다.

MVC에서 컨트롤러는 주요 진입 점으로 간주됩니다. 활동이 대부분의 응용 프로그램의 자연스러운 진입 점이기 때문에 Android 개발에 적용 할 경우 약간 논쟁의 여지가 있습니다.

이로 인해 개인적으로 모델 뷰 프리젠터 패턴이 Android 개발에 완벽하게 맞는다는 것을 알게 되었습니다. 이 패턴에서 뷰의 역할은 다음과 같습니다.

  • 진입 점으로 사용
  • 렌더링 컴포넌트
  • 발표자에게 사용자 이벤트 라우팅

이를 통해 다음과 같이 모델을 구현할 수 있습니다.

보기 -UI 구성 요소가 포함되어 있으며 해당 구성 요소의 이벤트를 처리합니다.

발표자 -모델과 뷰 간의 통신을 처리하고 모델의 게이트웨이로 간주합니다. 즉, 복잡한 도메인 모델을 나타내는 경우 하나님은 무엇을 알고 있으며 뷰에이 모델의 매우 작은 서브 세트 만 있으면됩니다. 발표자는 모델을 쿼리 한 다음 뷰를 업데이트해야합니다. 예를 들어 텍스트 단락, 헤드 라인 및 단어 수를 포함하는 모델이있는 경우입니다. 그러나 특정보기에서는보기에 헤드 라인 만 표시하면됩니다. 그런 다음 발표자는 모델에서 필요한 데이터를 읽고 그에 따라보기를 업데이트합니다.

모델 -기본적으로 전체 도메인 모델이어야합니다. 위와 같이 사례를 처리하기위한 특별한 방법이 필요하지 않기 때문에 도메인 모델을보다 “단단하게”만드는 데 도움이되기를 바랍니다.

프리젠터를 사용하여 뷰에서 모델을 모두 분리함으로써 모델을 테스트하는 것이 훨씬 직관적이됩니다. 도메인 모델에 대한 단위 테스트와 발표자에 대한 단위 테스트를 가질 수 있습니다.

사용해보십시오. 개인적으로 안드로이드 개발에 적합하다고 생각합니다.


답변

2018 년 11 월 업데이트

몇 년 동안 Android에서 MVC 및 MVP에 대한 작업 및 블로그 작업을 한 후 (아래 답변 본문 참조) 더 포괄적이고 쉽게 소화 할 수있는 형태로 내 지식과 이해를 포착하기로 결정했습니다.

그래서 나는 안드로이드 애플리케이션 아키텍처에 대한 완전한 비디오 코스를 발표했다. 따라서 Android 개발에서 가장 고급 아키텍처 패턴을 익히려면 여기에서이 포괄적 인 과정을 확인하십시오 .

이 답변은 2016 년 11 월부터 관련성을 유지하기 위해 업데이트되었습니다.


디자인 패턴 보다는 건축 패턴을 찾는 것 같습니다 .

디자인 패턴 은 프로그래머가 특정 반복적 인 소프트웨어 작업을 처리하기 위해 구현할 수있는 일반적인 “트릭”을 설명하는 것을 목표로합니다. 예를 들면 : OOP에서, 객체가 일부 이벤트에 대해 다른 객체 세트에 통지 할 필요가있을 때, 관찰자 디자인 패턴 이 사용될 수있다.

안드로이드 응용 프로그램 (및 대부분의 AOSP)은 객체 지향적 인 Java로 작성되었으므로 Android에서 사용되지 않는 단일 OOP 디자인 패턴을 찾는 데 어려움을 겪을 것이라고 생각합니다.

반면에 아키텍처 패턴 은 특정 소프트웨어 작업을 다루지 않으며 문제의 소프트웨어 구성 요소 사용 사례를 기반으로 소프트웨어 구성 을위한 템플릿 을 제공하는 것을 목표로합니다 .

약간 복잡한 것처럼 들리지만 예제가 명확 해지기를 바랍니다. 일부 응용 프로그램을 사용하여 원격 서버에서 데이터를 가져 와서 구조화 된 방식으로 사용자에게 제시하면 MVC 가 고려하기에 좋습니다. 응용 프로그램의 소프트웨어 작업 및 프로그램 흐름에 대해서는 아무 말도하지 않았습니다. 방금 사용자 관점에서 설명했지만 아키텍처 패턴의 후보가 나타났습니다.

귀하의 질문에 MVC를 언급 했으므로 건축 패턴이 당신이 찾고있는 것이라고 생각합니다.

여기에 이미지 설명을 입력하십시오


역사적으로 Google은 애플리케이션 아키텍처에 대한 공식 가이드 라인을 제공하지 않았으며, 그 이유는 무엇보다도 Android 앱의 소스 코드에 큰 혼란을 초래했습니다. 실제로 오늘날까지도 볼 수있는 대부분의 응용 프로그램은 여전히 ​​OOP 모범 사례를 따르지 않으며 명확한 논리적 코드 구성을 보여주지 않습니다.

그러나 오늘날 상황은 다르다. 구글은 최근 안드로이드 스튜디오와 완벽하게 통합 된 데이터 바인딩 라이브러리를 출시했으며 심지어 안드로이드 애플리케이션을위한 일련의 아키텍처 청사진을 발표했다 .

2 년 전에는 Android에서 MVC 또는 MVP에 대한 정보를 찾기가 매우 어려웠습니다. 오늘날 MVC, MVP 및 MVVM은 Android 커뮤니티에서 “버즈 워드”가되었으며 MVx가 MVy보다 낫다는 것을 지속적으로 확신시키는 수많은 전문가들로 둘러싸여 있습니다. 내 의견으로는 MVx가 MVy보다 나은지에 대한 논의는 용어 자체가 매우 모호하기 때문에 전혀 의미가 없습니다. 이 질문에 대한 답변을 살펴보십시오. 다른 사람들 이이 약어를 완전히 다른 구성과 연관시킬 수 있음을 알게 될 것입니다.

안드로이드에 가장 적합한 아키텍처 패턴에 대한 검색이 공식적으로 시작 되었기 때문에 몇 가지 아이디어가 더 나올 것이라고 생각합니다. 이 시점에서 미래에 어떤 패턴이 산업 표준이 될지 예측하는 것은 실제로 불가능합니다. 우리는 기다려야 할 것입니다 (1 ~ 2 년 문제라고 생각합니다).

그러나 높은 신뢰도로 만들 수있는 한 가지 예측이 있습니다. 데이터 바인딩 라이브러리의 사용은 업계 표준이되지 않습니다. Data Binding 라이브러리 (현재 구현)는 단기적인 생산성 향상과 일종의 아키텍처 지침을 제공하지만 장기적으로는 코드를 유지 관리 할 수 ​​없다고 확신합니다. 이 라이브러리의 장기적인 효과가 드러나면 포기됩니다.


현재 공식적인 지침과 도구가 있지만, 개인적으로 이러한 지침과 도구가 최선의 선택이라고 생각하지는 않습니다 (그리고 반드시 유일한 것은 아닙니다). 내 응용 프로그램에서는 MVC 아키텍처의 자체 구현을 사용합니다. 간단하고 깨끗하며 읽기 쉽고 테스트 가능하며 추가 라이브러리가 필요하지 않습니다.

이 MVC는 다른 것들과 외형 적으로 다를뿐 아니라 Android의 활동이 UI 요소가 아니라는 이론을 기반으로하며 이는 코드 구성에 큰 영향을 미칩니다.

따라서 SOLID 원칙 을 따르는 Android 응용 프로그램에 적합한 아키텍처 패턴을 찾고 있다면 Android의 MVC 및 MVP 아키텍처 패턴에 대한 내 게시물에서 설명을 찾을 수 있습니다 .


답변

여기에 이미지 설명을 입력하십시오

이 게시물에 도달하면 실제로 예제로 패턴을 이해하는 데 도움이되므로 Android 프레임 워크에서 디자인 패턴 및 예제를 명확하게 볼 수 있도록 아래 표를 만들었습니다.

도움이 되길 바랍니다.


답변

Android 프레임 워크에는 다음과 같은 다양한 패턴이 사용됩니다.

  • 브로드 캐스트 수신기는 관찰자 패턴을 사용합니다.
  • 원격 서비스 호출은 프록시 패턴을 사용합니다.
  • 보기 및보기 그룹은 복합 패턴을 사용합니다
  • 미디어 프레임 워크는 Facade 패턴을 사용합니다

답변

다음은 Android 용 공통 디자인 패턴에 대한 훌륭한 기사입니다 .

창조 패턴 :

  • 빌더 (예 : AlertDialog.Builder )
  • 의존성 주입 (예 : 단검 2 )
  • 하나씩 일어나는 것

구조 패턴 :

  • 어댑터 (예 : RecyclerView.Adapter )
  • 외관 (예 : 개조 )

행동 패턴 :

  • 명령 (예 : EventBus )
  • 관찰자 (예 : RxAndroid )
  • 모델 뷰 컨트롤러
  • Model View ViewModel ( 위의 MVC 패턴과 유사 )

답변

다음 Android 클래스는 디자인 패턴을 사용합니다.

1) 뷰 홀더는 싱글 톤 디자인 패턴을 사용합니다.

2) 의도는 공장 디자인 패턴을 사용

3) 어댑터는 어댑터 디자인 패턴을 사용합니다.

4) 방송 수신기는 관찰자 디자인 패턴을 사용

5) 뷰는 복합 디자인 패턴을 사용합니다

6) 미디어 프레임 워크는 파사드 디자인 패턴을 사용합니다


답변

에서 알림 경우는이 NotificationCompat.Builder사용 빌더 패턴

처럼,

mBuilder = new NotificationCompat.Builder(this)
                    .setSmallIcon(R.drawable.ic_stat_notification)
                    .setContentTitle(getString(R.string.notification))
                    .setContentText(getString(R.string.ping))
                    .setDefaults(Notification.DEFAULT_ALL);