Android의 MVC 패턴


497

Android 용 Java에서 모델보기 컨트롤러 패턴을 구현할 수 있습니까?

아니면 이미 활동을 통해 구현 되었습니까? 아니면 Android 용 MVC 패턴을 구현하는 더 좋은 방법이 있습니까?


64
귀하의 질문은 매우 좋습니다. 그러나 해결책으로 표시된 대답은 내 의견으로는 정확하지 않습니다. 여러 사람을 오도 할 수 있습니다.
Saghar


1
또한 MVC를 준수하기 위해 따라야 할 추가 규칙 세트가 있습니까? 아니면 Android 개발이 활동, XML, 리소스로 인해 MVC에 맞게 조정 되었습니까?
udun의 불꽃

3
@Dori, 나는 당신의 링크를 고칩니다 : Android Architecture : MV?
Andreybeta

이 기사는 실제 예제를 통해 Android에서 MVC를 찾고있는 것과 정확히 일치합니다. digigene.com/architecture/android-architecture-part-2-mvc
Ali Nem

답변:


239

Android에는 MVC가 없지만 다음이 있습니다.

  • 해상도, 하드웨어 등에 따라 다양한 XML 파일로 사용자 인터페이스 를 정의합니다 .
  • 로케일 등으로 다양한 XML 파일에서 자원 을 정의합니다 .
  • ListActivity , TabActivity 와 같은 클래스를 확장 하고 인플레이터로 XML 파일을 사용합니다 .
  • 비즈니스 로직에 대해 원하는만큼 클래스를 작성할 수 있습니다.
  • 많은 Utils 가 이미 작성되었습니다 -DatabaseUtils , Html.

3
@JDPekham, 왜 "레이아웃 / 뷰와 대화하지 않고 활동을 인스턴스화 할 수 없습니다"라고 말합니까? 액티비티를 인스턴스화 할 때는 뷰와 대화 할 필요가 없습니다. 실제로 뷰와 대화하는 것이 결코 액티비티 인스턴스화의 일부가 아닙니다. 적합하다고 판단 될 때 뷰와 상호 작용하는 다양한 활동 메소드를 호출 할 수는 있지만 호출 할 필요는 없습니다. 두 번째 질문 : 활동이 "제어기"역할을 수행한다고 가정합니다 (많은 안드로이드 개발자가 그렇게 생각한다고 생각합니다) 왜 활동에서 귀하의 의견을 말하지 않습니까?

8
"Android is MVC"라고 말하는 사람은 일주일 동안 Backbone.js (예, 클라이언트 쪽 js)를 사용해 본 후 "Android is MVC"라고 말합니다. 당신은 마침내 그 질문과 우리가 계속 묻는 이유를 이해할 것입니다 :)
Mark Peterson

14
"Android에는 MVC가 없습니다"???? 다른 언어와 마찬가지로 Android에서는 MVC를 원한다면 MVC가 있습니다.
Lorenzo Barbagli

1
@LorenzoBarbagli 그는 안드로이드가 의도적으로 앱에 MVC를 적용하지 않는다는 것을 의미합니다 (iOS처럼). MVC가 제공하는 것을 달성하려면 MVC, MVP 또는 그 밖의 다른 특징을 구현해야합니다. 즉, 문제 분리와 격리되고 쉽게 테스트 할 수있는 모델입니다.
Piovezan

아니요. Android에는 MVC가 있지만 더 암시 적으로 있습니다. 안드로이드가 모든 것을 어떻게 구성하는지에 따라 다른 방식으로 구현되었습니다.
6rchid

229

보편적으로 독특한 MVC 패턴은 없습니다. MVC는 견고한 프로그래밍 프레임 워크가 아닌 개념입니다. 모든 플랫폼에서 고유 한 MVC를 구현할 수 있습니다. 다음 기본 아이디어를 따르는 한 MVC를 구현하고 있습니다.

  • 모델 : 렌더링 대상
  • 보기 : 렌더링 방법
  • 컨트롤러 : 이벤트, 사용자 입력

모델을 프로그래밍 할 때 모델은 렌더링 (또는 플랫폼 별 코드)에 대해 걱정할 필요가 없습니다. 모델은보기에 말하기를, 렌더링이 Android 또는 iOS 또는 Windows Phone인지 상관하지 않습니다. 이것은 렌더링해야합니다. 뷰는 플랫폼 별 렌더링 코드 만 처리합니다.

플랫폼 간 응용 프로그램을 개발하기 위해 Mono 를 사용 하여 모델을 공유 할 때 특히 유용 합니다.


12
그것은 사실이지만 잘 말하지만, 이것은 이론이며 사람들은 실용적입니다!
TWiStErRob

1
@TWiStErRob 그러나 디자인 패턴은이를 실현하는 한 가지 방법이없는 이론적이고 추상적 인 아이디어입니다. “이론적으로 MVC를 이해하고 싶지 않고 구현하고 싶다”고 선언하는 것은“세탁기가 Cleaner ™ 패턴을 구현하기 때문에 세탁기를 세탁기에 넣을 것입니다. 그리고 부엌은 그것을 필요로합니다.”
Luke

1
다른 사람들이 생각 해낸 것을 보여주기 때문에 예가 귀중하다고 생각합니다. 우리는 그들을 향상시키고 그들의 노력으로부터 배울 수 있습니다. 모두가 바퀴를 재발 명할 필요가 없습니다. 안드로이드와 복잡한 라이프 사이클의 맥락에서 디자인 패턴으로 해결되지 않은 문제가 있지만 모든 사람들이 직면하게 될 것입니다. 이것이 제가 실제로 의미하는 바입니다.
TWiStErRob

47

안드로이드에 대한 조치,보기 및 활동은 구운에 안드로이드 UI 작업의 방법과의 구현입니다 모델 - 뷰 - 뷰 모델 (MVVM) 패턴 (같은 가족) 모델 - 뷰 구조적으로 유사하다, -제어 장치.

내가 아는 한,이 모델에서 벗어날 수있는 방법은 없습니다. 아마도 가능할 수도 있지만 기존 모델의 모든 이점을 잃을 수도 있고 UI 레이어를 다시 작성해야 작동 할 수도 있습니다.


29

일부 검색 후 가장 합리적인 답변은 다음과 같습니다.

MVC는 이미 Android에서 다음과 같이 구현되었습니다.

  1. 보기 = 레이아웃, 자원과 내장 같은 클래스 Button에서 파생 android.view.View.
  2. 컨트롤러 = 활동
  3. 모델 = 애플리케이션 로직을 구현하는 클래스

(이것은 활동에 응용 프로그램 도메인 논리가 없음을 의미합니다.)

소규모 개발자에게 가장 합리적인 것은이 패턴을 따르고 Google이하지 않기로 결정한 것을하지 않는 것입니다.

추신 활동이 때때로 재시작되기 때문에 모델 데이터를위한 장소가 아닙니다 (다시 시작하는 가장 쉬운 방법 android:configChanges="keyboardHidden|orientation"은 XML에서 생략 하고 기기를 돌리는 것입니다).

편집하다

우리는 MVC 에 대해 이야기하고 있지만 FMVC , Framework--Model--View--Controller 라고 말할 것 입니다. 프레임 워크 (안드로이드 OS)의 구성 요소 라이프 사이클 및 관련 이벤트의 아이디어를 부과하고, 연습에 컨트롤러 ( Activity/ Service/ BroadcastReceiver) 다음에 대처하기위한 우선 책임의입니다 프레임 워크 이벤트 -imposed (예 에서 onCreate ()를 ). 사용자 입력을 별도로 처리해야합니까? 분리해야 할 경우에도 사용자 입력 이벤트도 Android에서 제공됩니다.

어쨌든 안드로이드 전용이 아닌 코드가 적을수록 Activity/ Service/ BroadcastReceiver에 더 좋습니다.


3
액티비티는 UI에 직접 액세스하는 반면 MVC 컨트롤러에서는 뷰에 대해 알 수 없습니다 (반대의 경우 만).
Konrad Morawski

2
@KonradMorawski 흠 .... 보기 것을 표시에 대해 알고 정보] 컨트롤러 ? 컨트롤러Button 에 대해 아는 아이 ? 가 표시하는 것만 알고있는 것이 더 논리적으로 보입니다 . Model 이 데이터의 특성에 대해서만 알고 있다는 점을 고려하면 Controller 가 필요한 이유 는 ModelView 모두에 대해 알아야합니다 .
18446744073709551615

4
분명히보기는 컨트롤러에 이벤트를 위임하기 위해 컨트롤러에 대해 알아야합니다. 컨트롤러는 모델을 따라 가서 View에 결과가 무엇인지 알려줍니다 (표시 할 수 있도록). 컨트롤러는 뷰를 팽창시키지 않으며 (Activity가있는 곳) 버튼, 텍스트 상자, 목록 등에 대해 알고 있어야합니다 (Activity가 알고있는 곳).
Konrad Morawski

1
나는 Service컨트롤러의 우산 아래에 있다고 생각합니다
CL22

1
관찰자에 대해 들어 본 적이 있습니까? 지금까지 발견 된 가장 좋은 분리는 1. 컨트롤러에 모델 인스턴스 만 있고, 2. 모델에는 컨트롤러 또는 뷰에 대한 지식이 없지만 뷰는 모델 옵저버로 등록 할 수 있습니다 (따라서 모델은 뷰에 대해 알고 있지만 뷰가 누구인지 알지 못함) 신경 쓰지 않음)-데이터를로드하여 모델을 완료하면 모든 관찰자 (일반적으로 1)에게 통보합니다. 3. 뷰에는 데이터를 가져 오는 모델 인스턴스 만 있습니다. 이 방법으로 모든 MVC 프레임 워크에 대해 2 개의 종속 항목 만 있습니다. 나는 2가 최소라고 생각하므로 최고의 레이아웃이어야합니다.
Srneczek

18

준수 할 수있는 단일 MVC 패턴은 없습니다. MVC는 데이터와 뷰를 혼동해서는 안된다고 다소 언급하고 있습니다. 예를 들어 뷰가 데이터를 보유 할 책임이 있거나 데이터를 처리하는 클래스가 뷰에 직접 영향을 미칩니다.

그럼에도 불구하고 Android가 클래스 및 리소스를 처리하는 방식에 따라 MVC 패턴을 따라야하는 경우도 있습니다. 내 견해로는 때로는 견해를 담당하는 활동이 있지만 그럼에도 불구하고 동시에 컨트롤러 역할을하는 활동이 더 복잡합니다.

XML 파일에서보기 및 레이아웃을 정의하고 res 폴더에서 리소스를로드하고 코드에서 이러한 것들을 혼동하지 않도록하려면 MVC 패턴을 따르십시오.


14

Android에서 MVC를 구현할 수 있지만 "기본적으로 지원되지"않으며 약간의 노력이 필요합니다.

즉, 개인적으로 안드로이드 개발을위한 훨씬 깨끗한 아키텍처 패턴 으로 MVP 를 선호 합니다. 그리고 MVP라고 말하면 이것을 의미합니다.

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

나는 또한 여기에 더 자세한 답변을 게시했습니다 .

Android에서 MVC / MVP 구현에 대한 다양한 접근 방식을 사용한 후 합리적인 아키텍처 패턴 을 찾았 습니다.이 게시물 에서는 Android의 MVP 및 MVC 아키텍처 패턴에 대해 설명했습니다 .


14

Android에서 MVC를 구현하는 가장 좋은 리소스는 다음 게시물입니다 .

나는 내 프로젝트 중 하나에 대해 동일한 디자인을 따랐으며 훌륭하게 작동했습니다. 저는 안드로이드 초보자이므로 이것이 최선의 해결책이라고 말할 수는 없습니다.

하나의 수정을했습니다. 가로 세로 모드가 변경 될 때 다시 만들지 않도록 응용 프로그램 클래스의 각 활동에 대한 모델과 컨트롤러를 인스턴스화했습니다.


8
기사가 언젠가 삭제 된 경우 요약을 얻는 것이 좋습니다.
pqsk

12

JDPeckham에 동의하며 XML만으로는 응용 프로그램의 UI 부분을 구현하기에 충분하지 않다고 생각합니다.

그러나 활동을 뷰의 일부로 생각하면 MVC를 구현하는 것이 매우 간단합니다. Activity의 getApplication ()에 의해 리턴 된대로 Application 을 대체 할 수 있으며 여기에서 애플리케이션의 수명 동안 지속되는 컨트롤러를 작성할 수 있습니다.

(또는 응용 프로그램 설명서에서 제안한대로 싱글 톤 패턴을 사용할 수 있습니다)


12

안드로이드 MVC- 아키텍처 모든 MVP를 따르는 것이 낫습니다. 대신 안드로이드의 MVC입니다. 그러나 여전히 질문에 대한 대답에 따르면 이것은 해결책이 될 수 있습니다.

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

설명 및 지침

     Controller -
        Activity can play the role.
        Use an application class to write the
        global methods and define, and avoid
        static variables in the controller label
    Model -
        Entity like - user, Product, and Customer class.
    View -
        XML layout files.
    ViewModel -
        Class with like CartItem and owner
        models with multiple class properties
    Service -
        DataService- All the tables which have logic
        to get the data to bind the models - UserTable,
        CustomerTable
        NetworkService - Service logic binds the
        logic with network call - Login Service
Helpers -
        StringHelper, ValidationHelper static
        methods for helping format and validation code.
SharedView - fragmets or shared views from the code
        can be separated here

AppConstant -
        Use the Values folder XML files
        for constant app level

참고 1 :

이제 여기 당신이 할 수있는 마술이 있습니다. 코드를 분류 한 후에는 IEntity 및 IService와 같은 기본 인터페이스 클래스를 작성하십시오. 일반적인 방법을 선언하십시오. 이제 추상 클래스 BaseService를 작성하고 고유 한 메소드 세트를 선언하고 코드를 분리하십시오.

참고 2 : 활동에 코드 / 논리를 작성하는 대신 여러 모델을 제시하는 경우 뷰를 조각으로 나누는 것이 좋습니다. 그렇다면 더 좋습니다. 따라서 앞으로 뷰에 더 많은 모델이 필요하면 조각을 하나 더 추가하십시오.

참고 3 : 코드 분리는 매우 중요합니다. 아키텍처의 모든 구성 요소는 종속 논리가 없어 독립적이어야합니다. 우연히 의존적 인 논리가있는 경우 그 사이에 매핑 논리 클래스를 작성하십시오. 앞으로 도움이 될 것입니다.



9

Android의 MVC 패턴은 어댑터 클래스로 구현됩니다 . 컨트롤러를 "어댑터"로 바꿉니다. 어댑터 상태에 대한 설명 :

Adapter 오브젝트는 AdapterView와 해당보기의 기본 데이터 사이의 브릿지 역할을합니다.

데이터베이스에서 읽는 Android 응용 프로그램을 찾고 있습니다. 아직 잘 작동하는지 모르겠습니다. 그러나 Qt의 Model-View-Delegate 아키텍처와 비슷해 보이는데, 이는 전통적인 MVC 패턴에서 한 단계 발전한 것입니다. 적어도 PC에서는 Qt의 패턴이 상당히 잘 작동합니다.


9

이 게시물은 오래 된 것 같지만 Android에 대한이 분야의 최근 개발에 대해 알리기 위해 다음 두 가지를 추가하고 싶습니다.

android- binding-안드로이드 뷰 위젯을 데이터 모델에 바인딩하는 프레임 워크를 제공합니다. 그것은 안드로이드 응용 프로그램에서 MVC 또는 MVVM 패턴을 구현하는 데 도움이됩니다.

roboguice -RoboGuice는 개발 과정에서 추측을 제거합니다. View, Resource, System Service 또는 기타 개체를 주입하고 RoboGuice가 세부 정보를 처리하도록합니다.


9

MVC (모델 뷰 컨트롤러)

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


기술:

  • 소프트웨어 개발에서 대규모 프로젝트를 수행해야하는 경우 MVC는 프로젝트를 구성하는 보편적 인 방법이기 때문에 일반적으로 사용됩니다.
  • 새로운 개발자는 프로젝트에 빠르게 적응할 수 있습니다
  • 대규모 프로젝트 개발과 플랫폼 간 개발에도 도움이됩니다.

MVC 패턴은 본질적으로 다음과 같습니다.

  • 모델 : 표시 대상 이것은 데이터 소스가 될 수 있습니다 (예 : 앱의 서버, 원시 데이터)
  • 보기 : 표시 방법 이것은 xml 일 수 있습니다. 따라서 프리젠 테이션 필터 역할을합니다. 뷰는 해당 모델 (또는 모델 부분)에 첨부되며 프리젠 테이션에 필요한 데이터를 가져옵니다.
  • 컨트롤러 : 사용자 입력과 같은 이벤트 처리 이것은 활동이다

MVC의 중요한 기능 : 모델이나 뷰 또는 컨트롤러가 여전히 다른 모델에 영향을 미치지 않도록 수정할 수 있습니다

  • 뷰의 색상, 뷰의 크기 또는 뷰의 위치를 ​​변경한다고 가정합니다. 그렇게해도 모델이나 컨트롤러에 영향을 미치지 않습니다
  • 서버에서 가져온 데이터 대신 에셋에서 데이터를 가져 오는 대신 모델을 변경해도 뷰 및 컨트롤러에 영향을 미치지 않습니다.
  • 컨트롤러 (활동의 논리)를 변경하면 모델과보기에 영향을 미치지 않습니다.

2
릴레이 정보보기 / 모델 방법에 대한 도관으로 컨트롤러를 사용한 적이 있습니다. 모델과 뷰가 서로 직접 접촉하는 방식이 궁금합니다. 이 구현의 출처 나 예가 있습니까?
Jacksonkr

7

가장 유용한 간단한 설명은 다음과 같습니다. http://www.cs.otago.ac.nz/cosc346/labs/COSC346-lab2.2up.pdf

내가보고 여기에서 읽은 다른 모든 것에서이 모든 것을 구현하면 어려워지고 안드로이드의 다른 부분과 잘 맞지 않습니다.

활동이 다른 리스너를 구현하도록하는 것은 이미 표준 Android 방식입니다. 가장 무해한 방법은 슬라이드가 onClick 및 기타 유형의 작업을 설명하고 여전히 활동에있는 함수로 그룹화하는 것처럼 Java Observer를 추가하는 것입니다.

안드로이드 방식은 활동이 두 가지를 모두 수행하는 것입니다. 싸워도 실제로 코딩을 확장하거나 수행하는 것이 더 쉬워지는 것은 아닙니다.

나는 두 번째 게시물에 동의합니다 . 사람들이 익숙한 방식이 아니라 이미 구현 된 것입니다. 동일한 파일에 있는지 여부에 관계없이 이미 분리되어 있습니다. 다른 언어 및 OS에 적합하도록 별도의 구분을 만들 필요가 없습니다.


6
제공 한 링크가 손상되었습니다.
mmBs

6

여기의 게시물 중 어느 것도 그 질문에 대답하지 않았다는 것이 놀랍습니다. 그것들은 너무 일반적이거나 모호하거나 부정확하거나 안드로이드의 구현을 다루지 않습니다.

MVC에서 보기 계층은 UI (사용자 인터페이스)를 표시하는 방법 만 알고 있습니다. 이를 위해 데이터가 필요한 경우 모델 계층 에서 가져옵니다 . 그러나 View는 모델에게 직접 데이터를 찾도록 요청하지 않고 Controller를 통해 데이터를 찾습니다 . 따라서 컨트롤러  는 모델 을 호출 하여 View에 필요한 데이터를 제공합니다 . 데이터가 준비되면 컨트롤러View 에서 데이터를 모델 에서 가져올 준비가되었음을 알립니다 . 이제 ViewModel 에서 데이터를 가져올 수 있습니다 .

이 흐름은 다음과 같이 요약 할 수 있습니다.

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

ViewPassive MVC 라고도   하는 Controller 를 통해 또는 Active MVC 인 Observable을 등록 하여 Model 의 데이터를 관찰함으로써 Model 의 데이터 가용성에 대해 View 가 알 수 있다는 점은 주목할 가치가 있습니다  .

구현 부분에서 가장 먼저 떠오르는 것 중 하나는 View에 어떤 안드로이드 구성 요소를 사용해야 합니까? Activity  또는 Fragment ?

답은 중요하지 않으며 둘 다 사용할 수 있다는 것입니다. 보기 는 UI와 사용자의 상호 작용 장치와 응답의 사용자 인터페이스 (UI)를 제공 할 수 있어야한다. 모두 Activity  와 Fragment  이에 필요한 방법을 제공합니다.

에서 사용되는 예제 응용 프로그램에서 이 문서 내가 사용한 Activity 에 대한 보기 계층 만 Fragment  사용할 수 있습니다.

완전한 샘플 앱은 여기 GitHub 저장소의 'mvc'브랜치에서 찾을 수 있습니다 .

또한 예를 통해 장점과 안드로이드에서 MVC 아키텍처의 단점 처리 한 여기 .

관심있는 사람들을 위해 안드로이드 앱 아키텍처에 대한 일련의 기사를 시작했습니다. 여기서 완전한 작동하는 앱을 통해 안드로이드 앱 개발을위한 MVC, MVP, MVVM과 같은 다양한 아키텍처를 비교합니다.


강사가 액티비티와 프래그먼트 를 뷰로 사용 해서는 안되며 실제로는 컨트롤러 여야하고 뷰는 별도의 파일이어야한다는 아키텍처 과정을 수강했습니다 . 왜 안되는지에 대한 의견이나 추론이 있습니까?
brandonx

나는 강사가 그것에 대해 정확하다고 생각하지 않습니다. 컨트롤러로 활동 또는 조각을 선택한다는 것은 컨트롤러에 컨텍스트를 전달하는 것을 의미합니다. 반면에보기에는 화면에 그리기위한 컨텍스트도 필요합니다. 이 방법, 즉 컨텍스트를 컨트롤러에 전달하면 앱이 메모리 누수를 일으키기 쉽고 컨트롤러가 상태를 가져서는 안된다고 생각합니다.
Ali Nem

5

안드로이드에서 MVx 재해에 질려서 최근에 단방향 데이터 흐름을 제공하고 MVC의 개념과 유사한 작은 라이브러리를 만들었습니다 : https://github.com/zserge/anvil

기본적으로 구성 요소 (활동, 조각 및 뷰 그룹)가 있습니다. 내부에서 뷰 레이어의 구조와 스타일을 정의합니다. 또한 데이터를 뷰에 바인딩하는 방법을 정의합니다. 마지막으로 동일한 위치에 리스너를 바인딩 할 수 있습니다.

그런 다음 데이터가 변경되면 전역 "render ()"메서드가 호출되고 뷰는 최신 데이터로 현명하게 업데이트됩니다.

다음은 코드 압축을 위해 내부에 모든 것을 포함하는 구성 요소의 예입니다 (물론 모델과 컨트롤러는 쉽게 분리 할 수 ​​있음). 여기서 "count"는 모델이고 view () 메서드는 뷰이고 "v-> count ++"는 버튼 클릭을 수신하고 모델을 업데이트하는 컨트롤러입니다.

public MyView extends RenderableView {
  public MyView(Context c) {
      super(c);
  }

  private int count = 0;

  public void view() {
    frameLayout(() -> {              // Define your view hierarchy
      size(FILL, WRAP);
      button(() -> {
          textColor(Color.RED);      // Define view style
          text("Clicked " + count);  // Bind data
          onClick(v -> count++);     // Bind listeners
      });
    });
  }

분리 된 모델과 컨트롤러를 사용하면 다음과 같습니다.

button(() -> {
   textColor(Color.RED);
   text("Clicked " + mModel.getClickCount());
   onClick(mController::onButtonClicked);
});

여기에서 각 버튼 클릭시 숫자가 증가 한 다음 "render ()"가 호출되고 버튼 텍스트가 업데이트됩니다.

Kotlin ( http://zserge.com/blog/anvil-kotlin.html) 을 사용하면 구문이 더 즐거워집니다 . 또한 람다가없는 Java에 대한 대체 구문이 있습니다.

라이브러리 자체는 매우 가볍고 의존성이 없으며 반사를 사용하지 않습니다.

(면책 조항 : 나는이 도서관의 저자입니다)


4

Xamarin 팀이 설명 한 설명 에 따르면 (iOS MVC에서 "이상한 것 같지만 잠시 기다립니다").

  • 모델 (데이터 또는 응용 프로그램 논리)
  • 보기 (사용자 인터페이스)
  • 컨트롤러 (코드 숨김)

나는 이것을 말할 수 있습니다 :

Android의 모델은 단순히 소포 가능 객체입니다. 보기는 XML 레이아웃이고 컨트롤러는 (활동 + 조각)입니다.

* 이것은 단지 나의 의견이며, 어떤 자원이나 책이 아닙니다.



3

많은 사람들이 MVC가 이미 Android에서 구현되었다고 말하고 있지만 사실이 아닙니다. Android는 기본적으로 MVC를 따르지 않습니다.

Google은 iPhone과 같은 MVC 구현의 제한 사항을 강제로 적용하지 않지만 프로젝트에서 원하는 패턴이나 기술을 원하는 개발자에게 달려 있습니다. 작거나 간단한 응용 프로그램에서는 MVC를 사용할 필요가 없지만 응용 프로그램으로 나중에 자라면서 복잡해지고 코드 수정이 필요한 경우 Android에서 MVC 패턴이 필요합니다.

코드를 쉽게 수정하고 문제를 줄이는 데 도움이됩니다. Android에서 MVC를 구현하려면 아래 주어진 링크를 따라 프로젝트에서 MVC 구현을 즐기십시오.

http://www.therealjoshua.com/2011/11/android-architecture-part-1-intro/

그러나 요즘에는 안드로이드 아키텍처 패턴과 함께 MVP가 개발자가 깨끗하고 강력한 안드로이드 응용 프로그램에 사용해야하는 최고의 옵션 중 하나라고 생각합니다.


1
동의했다. 안드로이드는 충분한 유연성을 가지고 있습니다. 귀하의 활동은 MVC의 세 가지 측면을 모두 처리하므로 거대하고 복잡하게 빠르게 성장할 수 있습니다.
Scott Biggs

2

MVC, MVVM 또는 Presentation Model 을 Android 앱에 적용 할 때 실제로 원하는 것은 명확한 구조화 된 프로젝트를 가지고 단위 테스트를 위해 더욱 중요하게하는 것입니다.

현재 타사 프레임 워크가 없으면 일반적으로 비즈니스 가치를 추가하지 않는 많은 코드 (addXXListener (), findViewById () 등)가 있습니다.

또한 일반적인 JUnit 테스트 대신 Android 단위 테스트를 실행해야합니다. 단위 테스트를 실행하는 데 시간이 오래 걸리고 다소 비실용적입니다. 이러한 이유로 몇 년 전에 우리 는 안드로이드 플랫폼을위한 데이터 바인딩 프레젠테이션 모델 프레임 워크 인 RoboBinding과 같은 오픈 소스 프로젝트를 시작했습니다 .

RoboBinding을 사용하면 읽기, 테스트 및 유지 관리가 더 쉬운 UI 코드를 작성할 수 있습니다. RoboBinding은 addXXListener 와 같은 불필요한 코드 의 필요성을 제거하고 UI 로직을 POJO 인 프리젠 테이션 모델로 전환하고 일반 JUnit 테스트 를 통해 테스트 할 수 있습니다 . RoboBinding 자체에는 300 개 이상의 JUnit 테스트가 제공되어 품질을 보장합니다.


1

내 이해에 따르면, 안드로이드가 MVC 패턴을 처리하는 방식은 다음과 같습니다.

컨트롤러 역할을하는 활동이 있습니다. 데이터를 얻는 책임이있는 클래스가 있습니다-모델, 그리고 뷰 인 View 클래스가 있습니다.

뷰에 대해 이야기 할 때 대부분의 사람들은 XML에 정의 된 시각적 부분 만 생각합니다. 뷰에는 생성자, 메소드 등이 java 클래스에 정의 된 프로그램 부분도 있다는 것을 잊지 마십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.