programing

Android의 MVC 패턴

nicescript 2022. 7. 6. 22:25
반응형

Android의 MVC 패턴

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

아니면 액티비티를 통해 이미 구현되어 있습니까?아니면 안드로이드용 MVC 패턴을 구현하는 더 좋은 방법이 있을까요?

Android에서는 MVC가 없지만 다음과 같은 기능이 있습니다.

  • 사용자 인터페이스는 해상도, 하드웨어 등에 따라 다양한 XML 파일에서 정의합니다.
  • 리소스는 다양한 XML 파일에서 로케일별로 정의합니다.
  • ListActivity, TabActivity 등의 클래스는 확장하여 인플레이터별로 XML 파일을 사용할 수 있습니다.
  • 비즈니스 로직에서 원하는 수만큼 클래스를 만들 수 있습니다.
  • Database Utils, Html 등 많은 유틸리티가 이미 작성되어 있습니다.

보편적으로 고유한 MVC 패턴은 없습니다.MVC는 견고한 프로그래밍 프레임워크라기보다는 개념입니다.임의의 플랫폼에 독자적인 MVC를 실장할 수 있습니다.다음 기본 개념에 충실하면 MVC를 구현할 수 있습니다.

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

또, 다음과 같이 생각해 주세요.모델을 프로그래밍할 때 모델은 렌더링(또는 플랫폼별 코드)에 대해 걱정할 필요가 없습니다.모델은 뷰에 대해 "당신의 렌더링이 Android든 iOS든 Windows Phone이든 상관없습니다."라고 말할 것입니다.뷰는 플랫폼별 렌더링 코드만 처리합니다.

이는 특히 Mono를 사용하여 교차 플랫폼 애플리케이션을 개발하기 위해 모델을 공유할 때 유용합니다.

Android의 동작, 뷰 및 액티비티는 Android UI와 함께 작동하는 기본 방식이며 모델 뷰 모델(MVVM) 패턴을 구현한 것으로, 모델 뷰 컨트롤러와 구조적으로 유사합니다.

내가 아는 한, 이 모델에서 벗어날 방법은 없다.가능하지만 기존 모델이 가지고 있는 이점을 모두 잃고 UI 계층을 다시 작성해야 사용할 수 있습니다.

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

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

  1. 및 = 、 소레리스 like like like like like like like like like like like like like like like like like like like like like like like like like like like like like like:Button derived from from에서 android.view.View.
  2. 컨트롤러 = 활동
  3. 모델 = 응용 프로그램 로직을 구현하는 클래스

(이것은, 액티비티에 애플리케이션 도메인 로직이 없는 것을 의미합니다).

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

액티비티가 재기동되는 가 있기 모델할 수 은 PS를 생략하는 입니다).android:configChanges="keyboardHidden|orientation"디바이스를 돌립니다).

편집

MVC에 대해 이야기하고 있을 수도 있지만, FMVC, Framework-Model-View-Controller라고 수도 있습니다.프레임워크(Android OS)는 컴포넌트의 라이프 사이클과 관련 이벤트를 강제하며 실제로는 컨트롤러(Activity/Service/BroadcastReceiver는, 우선, 이러한 프레임워크에 의해서 부과된 이벤트(onCreate()등)의 처리를 담당합니다.사용자 입력을 별도로 처리해야 합니까?그래도 분리할 수 없고, 사용자 입력 이벤트도 Android에서 발생합니다.

Android 가 아닌 에 덜 ,Activity/Service/BroadcastReceiver럴수록록좋좋좋

준수할 수 있는 MVC 패턴은 없습니다.MVC는 데이터 및 뷰를 혼합해서는 안 된다고 어느 정도 명시하고 있기 때문에 예를 들어 뷰가 데이터 보유를 담당하거나 데이터를 처리하는 클래스가 뷰에 직접 영향을 미칩니다.

그럼에도 불구하고 Android가 클래스와 리소스를 다루는 방식에서는 MVC 패턴을 따라야 하는 경우도 있습니다.내 생각에 더 복잡한 것은 때때로 시야를 책임지는 활동이지만 동시에 통제관 역할을 하는 활동이다.

XML 파일에서 뷰와 레이아웃을 정의하는 경우 res 폴더에서 리소스를 로드하고 코드에 이러한 항목이 혼합되지 않도록 하려면 MVC 패턴을 따릅니다.

Android에서 MVC를 구현할 수 있지만 "네이티브 지원"이 되지 않아 약간의 노력이 필요합니다.

그렇긴 하지만, 저는 개인적으로 안드로이드 개발을 위한 훨씬 깨끗한 아키텍처 패턴으로 MVP를 선호합니다.MVP란 말은 이겁니다.

여기에 이미지 설명 입력

여기에 좀 더 자세한 답변도 올렸습니다.

Android에서의 MVC/MVP 실장에 대한 다양한 어프로치를 통해 합리적인 아키텍처 패턴을 생각해 냈습니다.MVP와 MVC Architectural Patterns in Android에서 설명했습니다.

Android에서 MVC를 구현하기 위해 찾은 최고의 리소스는 다음과 같습니다.

프로젝트 중 하나에서도 같은 디자인을 따랐는데 잘 작동했어요.저는 안드로이드는 초보이기 때문에 이것이 가장 좋은 해결책이라고는 말할 수 없습니다.

한 가지 수정을 했습니다.가로 세로 모드가 변경되었을 때 재생성되지 않도록 응용 프로그램 클래스의 각 액티비티에 대해 모델과 컨트롤러를 인스턴스화했습니다.

JDPeckham에 동의하며, 애플리케이션의 UI 부분을 구현하기 위해서는 XML만으로는 충분하지 않다고 생각합니다.

단, 액티비티를 뷰의 일부로 간주할 경우 MVC를 구현하는 것은 매우 간단합니다.어플리케이션(액티비티의 getApplication()에 의해 반환된 것)을 덮어쓸 수 있으며, 여기서 어플리케이션의 라이프 타임 동안 존속하는 컨트롤러를 작성할 수 있습니다.

(어플리케이션 매뉴얼에 제시된 싱글톤 패턴을 사용할 수도 있습니다).

MVC - Android 아키텍처 안드로이드에서는 MVC 대신 MVP를 팔로우하는 것이 더 낫다.하지만 여전히 질문에 대한 답변에 따라 이것이 해결책이 될 수 있습니다.

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

설명 및 가이드라인

     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: 액티비티가 여러 모델을 제시하고 있는 경우, 액티비티 중에 코드/로직을 쓰는 것보다 뷰를 분할하는 것이 좋습니다.그럼 더 낫겠네요.따라서 향후 뷰에 표시하기 위해 모델이 더 필요한 경우 fragment를 하나 더 추가합니다.

메모 3: 코드 분리는 매우 중요합니다.아키텍처의 모든 컴포넌트는 의존 로직을 가지지 않고 독립되어 있어야 합니다.우연히 의존적인 논리가 있다면 그 사이에 매핑 논리 클래스를 작성합니다.이것은 장차 당신에게 도움이 될 것입니다.

레이아웃, 리소스, 활동 및 의도를 사용한 Android UI 생성은 MVC 패턴의 구현입니다.상세한 것에 대하여는, 다음의 링크를 참조해 주세요.http://www.cs.otago.ac.nz/cosc346/labs/COSC346-lab2.2up.pdf

pdf용 미러

Android의 MVC 패턴은 어댑터 클래스와 함께 구현됩니다.컨트롤러는 "어댑터"로 대체됩니다.어댑터에 대한 설명은 다음과 같습니다.

Adapter 객체는 AdapterView와 해당 뷰의 기본 데이터 간의 브리지 역할을 합니다.

데이터베이스에서 읽어내는 안드로이드 어플리케이션으로 알아보고 있기 때문에 아직 잘 동작하는지는 모릅니다.다만, QT의 Model-View-Delegate 아키텍처와 조금 비슷합니다.이 아키텍처는 기존의 MVC 패턴에서 한 단계 업그레이드된 것이라고 그들은 주장합니다.적어도 PC에서는 Qt의 패턴은 꽤 잘 작동합니다.

이 투고는 오래된 것 같습니다만, Android의 최신 동향에 대해 이하의 2가지를 추가하고 싶습니다.

Android-binding - Android 뷰 위젯을 데이터 모델에 바인딩할 수 있는 프레임워크를 제공합니다.안드로이드 애플리케이션에서 MVC 또는 MVVM 패턴을 구현하는 데 도움이 됩니다.

roboguice - RoboGuice는 개발에서 추측을 배제합니다.View, Resource, System Service 또는 기타 객체를 삽입하고 RoboGuice가 세부사항을 처리하도록 합니다.

모델 뷰 컨트롤러(MVC)

여기에 이미지 설명 입력


설명:

  • 소프트웨어 개발에서 대규모 프로젝트를 진행해야 할 경우 MVC는 일반적인 프로젝트 구성 방식이기 때문에 일반적으로 사용됩니다.
  • 신규 개발자는 프로젝트에 신속하게 적응할 수 있습니다.
  • 대형 프로젝트 및 크로스 플랫폼 개발에도 도움이 됩니다.

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

  • 모델: 표시할 항목.데이터 소스(예: 서버, 앱의 Raw data)가 될 수 있습니다.
  • 보기: 표시되는 방식.이것은 xml일 수 있습니다.따라서 이 필터는 프레젠테이션필터로서 기능합니다.뷰는 모델(또는 모델 부품)에 부착되어 프레젠테이션에 필요한 데이터를 가져옵니다.
  • 컨트롤러:사용자 입력과 같은 이벤트 처리.이것이 액티비티입니다

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

  • 뷰의 색상, 뷰의 크기 또는 뷰의 위치를 변경한다고 가정해 보겠습니다.그렇게 함으로써 모델이나 컨트롤러에 영향을 주지 않습니다.
  • (서버에서 가져온 데이터를 자산에서 가져오는 대신) 모델을 변경해도 뷰와 컨트롤러에는 영향을 주지 않습니다.
  • 컨트롤러(액티비티의 로직)를 변경해도 모델 및 뷰에는 영향을 주지 않습니다.

이 질문에 답한 게시물이 하나도 없는 것을 보니 놀라웠다.그것들은 너무 일반적이거나 모호하거나 부정확하거나 Android에서의 구현에 대처하지 않습니다.

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

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

여기에 이미지 설명 입력

는 컨트롤러(패시브 MVC라고도 함) 또는 관찰 가능한 Active MVC를 등록하여 모델의 데이터를 관찰함으로써 모델의 데이터 가용성에 대해 알 수 있습니다.

구현 부분에서 가장 먼저 떠오르는 것 중 하나는 View에 사용해야 하는 Android 컴포넌트입니다. Activity ★★★★★★★★★★★★★★★★★」Fragment

정답은 상관없고 둘 다 사용할 수 있다는 것입니다.View는 디바이스에 사용자 인터페이스(UI)를 표시할 수 있어야 하며 사용자 인터페이스와 UI의 상호 작용에 응답할 수 있어야 합니다.둘다요.Activity ★★★★★★★★★★★★★★★★★」Fragment이를 위해 필요한 방법을 제공합니다.

기사에 사용된 예제 앱에서 사용한 적이 있습니다.Activity보기 레이어의 경우,Fragment사용할 수도 있습니다.

완전한 샘플 앱은 제 GitHub repo의 mvc 브랜치에서 찾을 수 있습니다.

또, 안드로이드의 MVC 아키텍처의 장점과 단점도, 여기서 를 들어 설명했습니다.

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

가장 알기 쉬운 설명은 http://www.cs.otago.ac.nz/cosc346/labs/COSC346-lab2.2up.pdf 입니다.

제가 여기서 보고 읽은 것 중에서, 이 모든 것을 실장하는 것은 더 어려워지고 안드로이드의 다른 부분과 잘 어울리지 않습니다.

액티비티가 다른 청취자를 구현하는 것은 이미 표준 안드로이드 방식입니다.가장 무해한 방법은 슬라이드 설명과 같이 Java Observer를 추가하고 onClick 및 기타 유형의 작업을 아직 액티비티에 있는 기능으로 그룹화하는 것입니다.

Android 방식은 액티비티가 두 가지 작업을 모두 수행하는 것입니다.이 문제를 해결한다고 해서 확장이나 미래 코딩이 더 쉬워지는 것은 아닙니다.

번째 게시물에 동의합니다.이것은 이미 구현되어 있는 것입니다. 단지 사람들이 익숙한 방식이 아닙니다.같은 파일에 있든 없든 이미 분리가 되어 있습니다.다른 언어 및 OS에 적합하도록 별도의 분리를 만들 필요가 없습니다.

Android에서의 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에 대한 대체 구문도 있습니다.

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

(면책자:저는 이 라이브러리의 저자입니다.)

Xamarin 팀이 설명한 설명에 따르면 (iOS MVC에서 '이상한 것 같지만 잠시만')

  • 모델(데이터 또는 애플리케이션 로직),
  • 뷰(사용자 인터페이스) 및
  • 컨트롤러(코드 배면).

나는 이렇게 말할 수 있다.

Android의 모델은 단순히 포장할 수 있는 물건입니다.뷰는 XML 레이아웃이고 컨트롤러는 (액티비티 + 그 fragment)입니다.

이것은 어디까지나 제 의견일 뿐, 자료나 책의 내용은 아닙니다.

구현된 MVC 아키텍처는 없지만, MVP(모델-뷰-프레젠터) 아키텍처를 구현하기 위한 라이브러리/예제가 존재한다.

다음 링크를 확인하십시오.

Google은 Android 아키텍처 MVP의 예를 추가했습니다.

MVC는 이미 Android에 구현되어 있다고 하는 사람은 많지만, 그것은 사실이 아닙니다.Android는 기본적으로 MVC를 따르지 않습니다.

Google은 iPhone과 같은 MVC 구현의 제한을 강요하지 않고 개발자에게 프로젝트 내에서 원하는 패턴이나 기술을 강요할 것이기 때문에, 소규모 또는 단순한 애플리케이션에서는 MVC를 사용할 필요가 없지만, 애플리케이션이 성장하여 복잡해지고 나중에 코드 수정이 요구됩니다.rs, Android에서는 MVC 패턴이 필요합니다.

코드를 쉽게 수정할 수 있고 문제를 줄이는 데도 도움이 됩니다.Android에서 MVC를 구현하고 싶다면 아래 링크를 클릭하여 프로젝트에서 MVC 구현을 즐기십시오.

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

그러나 요즘은 Android Architectural Pattern과 함께 MVP가 깨끗하고 견고한 Android 애플리케이션을 위해 개발자들이 사용해야 하는 최고의 옵션 중 하나라고 생각합니다.

Android 앱에 MVC, MVVM 또는 프레젠테이션 모델을 적용할 때 우리가 진정으로 원하는 것은 명확한 구조화 프로젝트와 유닛 테스트에 더 쉬운 것입니다.

현재 서드파티 프레임워크가 없으면 비즈니스 가치를 추가하지 않는 코드(addXListener()나 findViewById() 등)가 많이 존재합니다.

게다가 일반적인 JUnit 테스트 대신 Android 유닛 테스트를 실행해야 합니다.이 테스트는 실행 시간이 오래 걸리고 유닛 테스트가 다소 비현실적입니다.이러한 이유로 몇 년 전 오픈 소스 프로젝트인 RoboBinding - Android 플랫폼용 데이터 바인딩 프레젠테이션 모델 프레임워크를 시작했습니다.

RoboBinding은 읽기, 테스트 및 유지보수가 용이한 UI 코드 작성을 지원합니다.RoboBinding은 addXListener 등의 불필요한 코드를 제거하고 UI 로직을 Presentation Model로 변경합니다.이는 POJO로 일반 JUnit 테스트를 통해 테스트할 수 있습니다.RoboBinding 자체에는 품질을 보장하기 위해 300개 이상의 JUnit 테스트가 포함되어 있습니다.

Android가 MVC 패턴을 처리하는 방법은 다음과 같습니다.

컨트롤러 역할을 하는 액티비티가 있습니다.데이터 수집을 담당하는 클래스가 있습니다.모델과 View 클래스가 있습니다.View 클래스는 View입니다.

뷰에 대해 이야기할 때 대부분의 사람들은 xml에 정의된 뷰의 시각적 부분만을 생각합니다.View에는 Java 클래스에서 정의된 생성자, 메서드 등이 포함된 프로그램 부분도 있습니다.

언급URL : https://stackoverflow.com/questions/2925054/mvc-pattern-on-android

반응형