MVP (Model-View-Presenter) 체계가 Android에 유용합니까?


34

사용자 작업에 대한 반응 (MVP의 발표자 부분)이 GUI 요소 (MVP의 부분보기)를 표시하는 동일한 활동으로 설정되는 동안 Android에서 View와 Presenter를 분리하는 방법

"Martin Fowler 또는 Michael Feathers [2]가 말한 것처럼 모델보기 발표자에서 UI의 논리는 발표 자라는 클래스로 분리되어 사용자의 모든 입력을 처리하고"멍청한 "보기에 무엇을 언제 수행해야하는지 알려줍니다. 디스플레이 "( 여기서 인용 ).

지금까지 안드로이드의 주요 기능 중 하나 는 행동을 취하고 이에 반응하고 결과를 보여주는 스마트 활동 이라고 생각했습니다 . MVP 체계가 Android 철학과 모순됩니까? 안드로이드에서 그것을 깨닫는 것이 합리적입니까? 그렇다면 어떻게 할 수 있습니까?


2
안드로이드 앱 소스에서 mvp / mvvm을 아직 보지 못했기 때문에 +1 좋은 질문입니다. mvp android 예제와 얼마나 많은 코드 / lib 오버 헤드가 발생하는지 보는 것이 흥미로울 것입니다. 에서 논의되지 않은이 문제 에 유래가 - 방법 - 투 - 생산을 권장-앱 휴대용 사이 - 안드로이드 - 및 - 기타 - 플랫폼
K3B

어쩌면 Stackoverflow에 넣을 수 있습니까, 아니면 규칙에 위배 될 수 있습니까?
Gangnus

Qestion을 복제하는 대신 관리자 중 한 사람에게이 질문을 마이그레이션하도록 요청할 수 있습니다. 여기에 programmers질문에 대한 더 논란의 여지가있는 질문은 stackoverflow"안드로이드에 mvp의 예가 있습니까?" 나를 위해 두 곳 모두 괜찮습니다.
k3b

불행한 일에 대해 유감스럽게 생각하지만 지금까지는 관리자와 연결하는 방법을 찾지 못했습니다 :-(
Gangnus

이 질문은 스택 오버플로에는 적합 하지 않습니다 . BTW- "플래그"링크를 사용하여 게시물을 신고하여 중재자에게 연락 할 수 있습니다.
ChrisF

답변:


15

안드로이드 응용 프로그램은 기본적으로 MVC (Model-View-Controller)를 중심으로 구축되었습니다. MVP는 이전과 같은 말을들은 적이 없지만 같은 소리를냅니다. 액티비티는 Controller의 역할을 채우고, XML 뷰는 단지 액티비티에서 프로그래밍 방식으로 빌드 할 있지만 XML로 작성하는 것이 더 쉽고 간단합니다) 직접 작성한 모델입니다. 예, 그 모델은 매우 실용적입니다.

이 디자인 모델에 대해 잘 모르는 이유는 Android 프레임 워크에서보기를 분리해야하기 때문입니다. 모바일 장치의 응용 프로그램은 크기가 작기 때문에 사람들은 완전한 MVC를 사용하지 않습니다. 그것들은 액션 레이어가 모델의 (작은) 많은 일을하는 뷰와 액션 레이어를 향합니다.

크로스 플랫폼 앱을 작성하는 경우보기, 동작, 비즈니스 논리 및 모델의 4 계층 접근 방식을 원할 수 있습니다. 비즈니스 로직 및 모델은 변경되지 않지만 뷰 및 작업 계층은 플랫폼에 따라 다릅니다. 기본적으로 발표자와 사용자 상호 작용을 작업 계층으로 분리하여 비즈니스 논리 계층을 호출하여 사용자가 원하는 작업을 수행합니다.


+1! 제발, 좋은 글을 참고할 수 있습니까?
Gangnus

4
MVP는 Action다른 플랫폼에서 유사한 UI 기능을 제공 할 때 (= 프레젠테이션) 레이어 플랫폼을 독립적 으로 유지할 수있는 기회를 제공한다고 생각했습니다 .
Doc Brown

@DocBrown 이론적으로는 그렇습니다. 실제로 사용자 상호 작용이보기 또는 발표자에게 영향을 줄 수 있기 때문에 가능할지는 확실하지 않습니다. 예를 들어 Android에서 스 와이프는 활동에 의해 처리되지만 웹 페이지에서는보기 (브라우저)에 의해 처리됩니다.
Michael K

12
"Android 애플리케이션은 기본적으로 Model-View-Controller를 기반으로 구축되었습니다"-많은 수준에서 잘못되었습니다. 죄송합니다. Android 프레임 워크 아키텍처는 View / Controller 로직이 복잡하게 생성되는 God 클래스를 중심으로 구축되었습니다.
Igor Filippov

2
@IgorFilippov의 의견을 두 번 이상 공표 할 수 있기를 바랍니다. Android 앱이 의도적으로 MVC를 구현한다는 아이디어는 일반적인 오해입니다. iOS와 달리, GUI 아키텍처는 관심사가 명확하게 분리되어 있고 테스트가 용이하고 격리 된 모델을 허용하는 GUI 아키텍처는 없습니다. MVP, MVC 또는 그 밖의 다른 것을 직접 제공해야합니다.
Piovezan

6

Android 프로그래밍에 대한 경험이 없지만 일부 소개 Android 프로그래밍 자습서를 간략히 살펴보면 다른 이벤트 기반 프레임 워크에서 MVP가 유용하지 않은 이유를 알 수 없습니다. 이 Activity클래스는 Dialog또는 Form다른 프레임 워크와 크게 다르지 않으므로 응용 프로그램의 모든 Activity 하위 클래스에 대해 "Activitity Presenter"클래스를 쉽게 만들고 핵심 논리를 배치해야합니다.

"활동"으로 전송되는 이벤트는 발표자에게 위임되어야하며, 발표자가 자체적으로 이벤트를 보내거나 다른 시스템 종속 기능을 호출하려는 경우 활동은 발표자와 공유하는 인터페이스를 통해 관련 기능을 제공해야합니다. 그러나 그것은 기본적으로 내가 알고있는 다른 GUI 프레임 워크와 동일합니다.


+1 감사합니다. 그러나 다른 답변에서 볼 수 있듯이 Android에서는 비슷하지만 다른 모델이 사용됩니다. "나는 50 년 동안 산문으로 말했지만 그것에 대해 몰랐다!" 이제 모델의 차이점을 살펴 보겠습니다.
Gangnus

4
@Gangnus : MVP는 특별한 형태의 MVC입니다. 여기에서 codebetter.com/jeremymiller/2007/07/26/… 자세한 정보를 찾을 수 있습니다. 그리고 나는 이것이 "MVC 또는 MVP"의 문제가 아니라고 확신합니다. 활동은 "컨트롤러"의 형태 일 수 있지만 플랫폼에 따라 다릅니다. 각 활동에 대해 UI 논리를 플랫폼 독립적 인 발표자 클래스로 분리하면 단위 테스트가 쉽고 휴대가 더 쉬워집니다.
Doc Brown

5

MVP는 확실히 Android에 유용합니다. 코드를 구성하고 단위 테스트하는 데 도움이됩니다. 그리고 가장 좋은 점은 코드를 읽는 새로운 사람들이 코드를 이해하고 그들이 어디로 가야하는지 알게 되 자마자 기여하기 시작할 것입니다. 다음은 MVP이해 하는 데 도움이되는 유용한 링크 입니다.

다음은 MVP의 세 가지 구성 요소에 대한 간략한 설명입니다.

전망

android MVP에서보기에는 Activity – android resource View – java interface Activity 두 가지가 있습니다. 다이어그램의 처음 세 블록은 View와 Presenter 간의 통신을 보여줍니다.

증여자

발표자는보기와 데이터 / 모델 사이의 중간 계층 역할을합니다. View (Activity) 명령은 발표자에게 무언가를 제시하고 발표자는 데이터베이스 / 모델에서 데이터를 가져 와서 제시 가능한 형식의 데이터를 View에 제공합니다. 그런 다음 View는 해당 데이터를 화면에 표시합니다. Presenter는 일반 Java 클래스이므로 Android 구성 요소를 포함하지 않아야합니다. 그렇지 않으면 Presenter의 단위 테스트가 어려워집니다.

발표자에서 데이터베이스를 사용하려면 활동이 데이터베이스 인스턴스를 작성하고 발표자에 삽입하십시오. 이렇게하면 단위 테스트 중에 데이터베이스를 조롱하고 비즈니스 논리를 테스트 할 수 있습니다.

모델

MVP의 모델은 데이터 소스 일뿐입니다. 보기는 데이터와 직접 대화하지 않고 발표자에게 데이터를 처리하고 추가 수정없이 표시 할 수있는 정보를 제공하도록 명령합니다.


1
정보는 유용합니다. 감사합니다. 그러나 잘못된 방식으로 제공됩니다. 자신의 사이트를 인용 할뿐만 아니라 여기에 정보를 제공해야합니다. 참조 답변은 허용되지 않습니다. 주석을 대신 사용하십시오. 귀하의 사이트에 대한 유용한 정보만으로 신고하지 않습니다. 의견으로 변경하거나 질문 본문에 답변하는 주요 정보를 답변에 입력하십시오. 그럼 당신은 내 플러스뿐만 아니라 답변 확인을 얻을 것이다.
Gangnus

@ 강 누스 나는 모든 내용을 넣으면 답변이 매우 커지기 때문에 답변에 필요한 정보를 제공했습니다.
Ajit Singh

1
실제로 두 종류의 MVP가 있습니다. Passive View (여기에 설명 된 내용)와 Supervising Presenter는 뷰에 데이터를 직접 바인딩 할 수있게합니다 (MVVM 및 많은 웹 MVC 프레임 워크와 유사).
RubberDuck
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.