programing

Android에서 사용되는 아키텍처 패턴은 무엇입니까?

css3 2023. 9. 17. 13:27

Android에서 사용되는 아키텍처 패턴은 무엇입니까?

모바일 플랫폼에 대해 작은 조사를 하고 있는데 안드로이드에서 어떤 디자인 패턴이 사용되는지 알고 싶습니다.

예를 들어 iOS Model-view-controller는 위임 및 기타 패턴과 함께 매우 광범위하게 사용됩니다.

안드로이드는 구체적으로 어떤 패턴을 사용하고 어디에 사용합니까?

편집

커널, 달빅 등 깊이 사용되는 디자인 패턴을 요구하는 것이 아니라, 애플리케이션 개발자가 애플리케이션을 개발하면서 만나게 될 패턴에 대한 것입니다.

저는 안드로이드 개발을 위해 모델-뷰-컨트롤러(MVC)와 모델-뷰-프레젠터 아키텍처 패턴을 모두 사용해 보았습니다.제가 발견한 바로는 모델-뷰-컨트롤러는 잘 작동하지만, 몇 가지 "문제"가 있습니다.안드로이드를 어떻게 인식하느냐에 달려 있습니다.Activity클래스. 컨트롤러인가요, 아니면 뷰인가요?

Activity안드로이드의 클래스를 확장하지 않습니다.View클래스(class)는 사용자에게 창을 표시하는 작업을 처리하고 해당 창의 이벤트(Create, Pause 등)도 처리합니다.

즉, MVC 패턴을 사용할 때 컨트롤러가 실제로 유사 보기 컨트롤러가 됨을 의미합니다.사용자에게 창을 표시하는 작업을 처리하므로 setContentView로 창에 추가한 뷰 구성 요소와 함께 다양한 활동 수명 주기 이벤트를 처리할 수 있습니다.

MVC에서는 컨트롤러가 주 진입점이 되어야 합니다.안드로이드 개발에 적용할 때는 활동이 대부분의 애플리케이션의 자연스러운 진입점이기 때문에 다소 논란의 여지가 있습니다.

그렇기 때문에 개인적으로 모델-뷰-프레젠터 패턴이 안드로이드 개발에 적합하다고 생각합니다.이 패턴에서 보기의 역할은 다음과 같습니다.

  • 진입점 역할 수행
  • 구성요소 렌더링
  • 발표자에게 사용자 이벤트 라우팅

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

보기 - UI 구성요소를 포함하고 해당 구성요소에 대한 이벤트를 처리합니다.

발표자 - 모델과 뷰 사이의 통신을 다루며, 모델의 관문으로 간주합니다.즉, 만약 복잡한 도메인 모델이 있다면, 신은 무엇을 알고 있고, 당신의 뷰는 이 모델의 아주 작은 부분만 필요로 한다면, 발표자의 일은 모델을 질의한 다음 뷰를 업데이트하는 것입니다.예를 들어, 텍스트 문단, 헤드라인 및 단어 수를 포함하는 모형이 있는 경우입니다.그러나 특정 보기에서는 보기에 헤드라인만 표시하면 됩니다.그러면 발표자가 모델에서 필요한 데이터를 읽고 뷰를 업데이트합니다.

모델 - 기본적으로 전체 도메인 모델이어야 합니다.위에서 언급한 사례를 처리하는 데 특별한 방법이 필요 없기 때문에 도메인 모델을 보다 "긴박하게" 만드는 데도 도움이 되기를 바랍니다.

(발표자를 사용하여) 보기에서 모델을 분리하면 모델을 테스트하는 것이 훨씬 직관적이 됩니다.도메인 모델에 대한 단위 테스트와 발표자에 대한 단위 테스트를 가질 수 있습니다.

한번 해보세요.저는 개인적으로 안드로이드 개발에 아주 적합하다고 생각합니다.

2018년 11월 업데이트

몇 년 동안 안드로이드에서 MVC와 MVP에 대해 작업하고 블로그를 하면서(아래 답변 본문 참조), 좀 더 포괄적이고 쉽게 이해할 수 있는 형태로 제 지식과 이해를 담아내기로 했습니다.

그래서 Android 애플리케이션 아키텍처에 관한 풀 블로우 비디오 코스를 공개했습니다.Android 개발에서 가장 진보된 아키텍처 패턴을 숙달하고 싶다면 여기에서 이 포괄적인 과정을 확인해 보십시오.

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


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

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

Android application(및 대부분의 AOSP)은 객체 지향적인 Java로 작성되어 있기 때문에 Android에서 사용되지 않는 단일 OOP 디자인 패턴을 찾기 어려울 것 같습니다.

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

좀 복잡한 것 같지만, 예를 들어 원격 서버에서 데이터를 가져와 구조화된 방식으로 사용자에게 제공하는 애플리케이션이 있다면 MVC를 고려하는 것이 좋습니다.소프트웨어 작업과 애플리케이션의 프로그램 흐름에 대해서는 아무 말도 하지 않았고, 단지 사용자의 관점에서 설명했을 뿐이며, 아키텍처 패턴에 대한 후보가 등장했습니다.

질문에서 MVC를 언급하셨으니, 건축 패턴이 바로 여러분이 찾으시는 것이라고 생각합니다.

Enter image description here


역사적으로 애플리케이션의 아키텍처에 대한 구글의 공식 지침이 없었고, 이로 인해 안드로이드 앱의 소스 코드가 완전히 엉망이 되었습니다.실제로 오늘날에도 대부분의 애플리케이션은 여전히 OOP 모범 사례를 따르지 않으며 명확한 논리적 코드 구성을 보여주지 못합니다.

그러나 오늘날 상황은 다릅니다. Google은 최근 Android Studio와 완전히 통합된 Data Binding 라이브러리를 출시했으며, 심지어 Android 애플리케이션을 위한 아키텍처 청사진 세트도 출시했습니다.

2년 전만 해도 안드로이드에서 MVC나 MVP에 대한 정보를 찾기가 매우 어려웠습니다.오늘날 MVC, MVP 및 MVVM은 Android 커뮤니티에서 "버즈워드"로 자리 잡았고, MVx가 MVy보다 더 낫다는 것을 끊임없이 설득하는 수많은 전문가들로 둘러싸여 있습니다.제 생각에 MVx가 MVy보다 더 나은지에 대해 논의하는 것은 용어 자체가 매우 모호하기 때문에 완전히 무의미합니다. 질문에 대한 답을 살펴보면 다른 사람들이 이러한 약어를 완전히 다른 구성 요소와 연결할 수 있다는 것을 알게 될 것입니다.

Android를 위한 최적의 아키텍처 패턴을 찾는 작업이 공식적으로 시작되었기 때문에, 앞으로 몇 가지 아이디어가 더 드러날 것으로 생각합니다.이 시점에서 어떤 패턴(또는 패턴)이 미래에 산업 표준이 될 것인지 예측하는 것은 정말 불가능합니다. 이를 지켜봐야 할 것입니다. (1~2년 정도의 문제라고 생각합니다.)

하지만 제가 확실하게 말할 수 있는 한 가지 예측이 있습니다.데이터 바인딩 라이브러리의 사용은 업계 표준이 되지 않습니다.Data Binding 라이브러리는 (현재 구현 중인) 단기적인 생산성 향상과 일종의 아키텍처 지침을 제공하지만 장기적으로는 코드를 유지할 수 없게 만들 것이기 때문에 확신합니다.이 도서관의 장기적인 효과가 나타나면 이 도서관은 버려질 것입니다.


오늘날 우리는 공식적인 지침과 도구를 가지고 있지만, 개인적으로 이러한 지침과 도구가 사용 가능한 최고의 옵션이라고 생각하지는 않습니다(단순히 이 지침과 도구만이 아닙니다).애플리케이션에서는 MVC 아키텍처의 자체 구현을 사용합니다.간단하고, 깨끗하고, 읽을 수 있고, 테스트 가능하며, 추가 라이브러리가 필요 없습니다.

이 MVC는 단순히 다른 것들과 외관상 다를 뿐만 아니라 안드로이드에서의 활동은 UI 요소가 아니라는 이론에 근거하고 있으며, 이는 코드 구성에 엄청난 영향을 미칩니다.

따라서 SOLID 원칙을 따르는 Android 애플리케이션을 위한 좋은 아키텍처 패턴을 찾고 있다면, 제 게시물에서 Android의 MVCMVP 아키텍처 패턴에 대한 설명을 찾을 수 있습니다.

enter image description here

이 게시물에 도달하면 예를 들어 패턴을 이해하는 데 도움이 되므로 아래 표를 만들어 Android Framework의 디자인 패턴과 예를 명확히 볼 수 있습니다.

도움이 되기를 바랍니다.

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

  • 브로드캐스트 수신기는 Observer 패턴을 사용합니다.
  • 원격 서비스 호출에서 Proxy 패턴 사용
  • 보기 및 보기 그룹에서 합성 패턴을 사용합니다.
  • Facade 패턴을 사용하는 미디어 프레임워크

Android의 공통 디자인 패턴에 대한 훌륭한 기사는 다음과 같습니다.

생성 패턴:

  • 작성기(예: AlertDialog)빌더)
  • 의존성 주입(예: 단검 2)
  • 싱글턴

구조 패턴:

  • 어댑터(예: RecyclerView).어댑터)
  • 정면(: 레트로핏)

행동 패턴:

  • 명령(예: 이벤트 버스)
  • 관찰자(예: RxAndroid)
  • 모델 뷰 컨트롤러
  • 모델 뷰 뷰 모델(위의 MVC 패턴과 유사)

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

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

2) 공장 설계 패턴을 사용하는 의도

3) 어댑터 디자인 패턴 사용

4) 브로드캐스트 리시버는 옵저버 디자인 패턴을 사용합니다.

5) 복합 설계 패턴을 사용한 뷰

6) Facade 디자인 패턴을 이용한 미디어 프레임워크

Notifications 케이스의 경우NotificationCompat.BuilderBuilder 패턴 사용

맘에 들다,

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

Android 또한 View를 사용합니다.홀더 디자인 패턴.

목록 보기를 스크롤하면서 성능을 개선하는 데 사용됩니다.

더 뷰홀더 디자인 패턴을 사용하면 조회할 필요 없이 각 목록 항목 보기에 액세스할 수 있으므로 귀중한 프로세서 주기를 절약할 수 있습니다.특히 ListView 스크롤 중에 findViewById() 호출이 자주 발생하지 않으므로 원활하게 처리할 수 있습니다.

MVC, MVVM, MVP, 프레젠테이션 모델 등 모든 패턴을 안드로이드 앱에 적용할 수 있지만, 타사 프레임워크가 없으면 잘 짜여진 구조와 깨끗한 코드를 얻기가 쉽지 않습니다.

MVVM은 Presentation Model에서 비롯되었습니다.MVC, MVVM, Presentation Model을 Android 앱에 적용할 때, 우리가 정말 원하는 것은 명확한 구조화된 프로젝트와 유닛 테스트를 더 쉽게 하는 것입니다.

현재 타사 프레임워크가 없으면 일반적으로 많은 코드(addXXListener(), findViewById() 등)를 사용할 수 있으므로 비즈니스 가치가 추가되지 않습니다.또한 일반 Junit 테스트 대신 Android 단위 테스트를 실행해야 하는데, 이 테스트는 실행하는 데 시간이 걸리고 단위 테스트를 다소 비현실적입니다.

이러한 이유로 몇 년 전부터 오픈 소스 프로젝트인 RoboBinding - Android 플랫폼을 위한 데이터 바인딩 프레젠테이션 모델 프레임워크를 시작했습니다.로보바인딩은 읽기, 테스트 및 유지보수가 더 쉬운 UI 코드를 작성할 수 있도록 도와줍니다.RoboBinding은 addXXListener와 같은 불필요한 코드를 제거하고, UI 로직을 POJO인 Presentation Model로 전환하여 일반 Junit 테스트를 통해 테스트할 수 있습니다.로보바인딩 자체는 품질을 보장하기 위해 300개 이상의 JUNIT 테스트를 제공합니다.

안드로이드 프레임워크에 적용된 디자인 패턴을 추가하고 싶습니다.이것은 비동기 작업 구현에 사용되는 Half Sync Half Async 패턴입니다.다음에서 제 토론 보기

https://docs.google.com/document/d/1_zihWXAwgTAdJc013-bOLUHPMrjeUBZnDuPkzMxEEj0/edit?usp=sharing

Android에서 "작업 대기열 프로세서" 패턴은 응용프로그램의 기본 스레드에서 작업을 오프로드하는 데 일반적으로 사용됩니다.

예:IntentService 클래스의 설계입니다.

Intent Service는 Intents를 수신하고 worker thread를 실행한 후 적절한 경우 서비스를 중지합니다.모든 요청은 단일 작업자 스레드에서 처리됩니다.

바인더는 사망 수신인 통지에 "관찰자 패턴"을 사용합니다.

언급URL : https://stackoverflow.com/questions/4916209/which-architecture-patterns-are-used-on-android