Program Tip

Android MVVM 디자인 패턴 예제

programtip 2020. 11. 24. 19:27
반응형

Android MVVM 디자인 패턴 예제


저는 현재 많은 WPF 개발을하고 있으며 몇 가지 기본적인 Android 앱을 만들기 시작했습니다. WPF 앱을 만들 때 보통 Prism을 사용하는 MVVM을 자주 사용하며 Android 플랫폼 용 MVVM의 예가 있는지 알고 싶습니다.


저는 Android-Binding 개발자입니다 . @Brentley가 말했듯이, 이것은 매우 새로운 프로젝트이지만 개선 될 수 있도록 더 많은 입소문과 경험을 얻고 싶습니다. 귀하의 질문으로 돌아가서 android-binding을 사용하여 MVVM에 대한 간단한 소개 / 튜토리얼을 작성했습니다.

잠재적 인 채택자는 프로젝트 토론 그룹 에도 등록하십시오 .


나는 때때로 ViewModels를 사용하여 순수한 모델에서 모델이 표시되어야하는 것으로 변환하지만 MVVM-ism의 대부분은 WPF 프레임 워크에 내장 된이 방대한 데이터 바인딩 엔진이 있다는 사실에서 비롯됩니다. Android 세계에서 WPF + MVVM의 정확한 경험을 찾을 수는 없지만 좋은 개념을 많이 취하여 구현할 수 있습니다 (자동 데이터 바인딩 항목없이).

하나는 ViewModels를 만듭니다. ViewModel을 생성하기 위해 Prism과 같은 프레임 워크가 필요하지 않습니다. PropertyChanged 알림 및 이와 같은 것들이 모두있는 것은 아니지만 데이터를 UI에서 더 잘 사용할 수있는 정보로 변환하여 코드를 정리할 수 있습니다. 이것의 완벽한 예는 슬라이더가 많은 UI로 한 것입니다. Android의 SeekBar는 항상 0 기반이며 정수 값으로 작동하므로 모델의 최소값, 최대 값 및 증분 값에 바인딩 할 수 없습니다. ViewModel을 사용하여 최소 / 최대 값을 SeekBar에서 사용할 수있는 0 기반 등가물로 변환 할 수 있습니다. 값 범위 등을 기반으로 색상과 크기를 표시 할 때도 마찬가지입니다. 저에게 ViewModels의 모든 것입니다.

DependencyInjection에 관해서는 RoboGuice를 확인하십시오. 지역 모임에서 제작자의 프레젠테이션을 본 후 내 프로젝트 중 하나에서이 기능을 사용하기 시작했으며 아마도 여러분이 찾고있는 것일 것입니다.

Google 코드의 RoboGuice

RoboGuice Google 그룹


현재로서는 아직 베타 버전이지만 공식 Android 데이터 바인딩 플러그인이 있습니다. Android Studio 베타 버전에서 바인딩 구문에 대한 도구 지원을 추가하는 작업도 진행 중입니다.

자세한 내용은 아래를 참조하십시오.

https://developer.android.com/tools/data-binding/guide.html


뷰를 android-binding 이라는 ViewModel에 바인딩 할 수있는 비교적 새로운 프레임 워크가 개발되고 있습니다 . 이 프레임 워크와 RoboGuice사용하면 MVVM을 사용할 수 있습니다. 프레임 워크는 여전히 약간의 작업이 필요하지만 좋은 시작점입니다.


Android-Data-Binding 라이브러리는 데이터를 사용자 인터페이스 요소에 연결하는 도구입니다. 레이아웃 파일이 생성되고 각 항목에 태그가 지정되면 한 줄의 코드가 모든 데이터를 사용자 인터페이스 요소에 바인딩하고 다른 작업을위한 시간을 절약합니다.


큰! @Florina Muntenescu의 기사

Model-View-ViewModel 패턴

MVVM 패턴의 주요 플레이어는 다음과 같습니다.

  • 보기 — 사용자의 작업에 대해 ViewModel에 알립니다.
  • ViewModel — View와 관련된 데이터 스트림을 노출합니다.
  • 데이터 모델 — 데이터 소스를 추상화합니다. ViewModel은 DataModel과 함께 작동하여 데이터를 가져오고 저장합니다.

MVVM 아키텍처의 예 :

https://github.com/erikcaffrey/People-MVVM

https://github.com/googlesamples/android-architecture/tree/todo-mvvm-databinding/

https://github.com/iammert/Android-MVVM-Architecture

https://github.com/segunfamisa/android-mvvm-sample

https://github.com/manas-chaudhari/android-mvvm


최근에 데이터 바인딩 라이브러리를 사용하여 Android 앱을 빌드하기 위해 MVVM 패턴을 구현했습니다. 여기에서 내가 한 작업과 코드 조각에 대한 자세한 리뷰를 읽을 수 있습니다. http://cases.azoft.com/mvvm-android-data-binding/

주제에 대해 자세히 알아 보려면 다음 앱 샘플을 참조하십시오 . https://github.com/ivacf/archi

검색 및 목록 화면으로 수행 한 작업의 시각적 예가 있습니다.


몇 년 전 나는 또한 WPF 및 WP 개발을 수행합니다. 프리즘 및 MVVM 라이트 툴킷은 일반적으로 WP 앱을 구축하는 데 사용되며, 제 생각에 윈도우 폰 애플리케이션 아키텍처에 완벽합니다! 그래서 저는 WP 개발의 이전 경험을 사용하여 Android MVVM Light Toolkit 을 생성하기 위해 모방합니다 (Android MVVM 애플리케이션을 빌드하는 툴킷 도움말 , 우리는 View의 Data Binding (ImageView의 Uri와 같은)에 대한 더 많은 속성을 가지고 있습니다). 이벤트 (버튼 클릭과 같은), 다른 ViewModel과 통신하기위한 글로벌 메시지 파이프도 있습니다.)

GitHub : Android MVVM Light Toolkit , 참조 용 샘플이 있습니다.

아키텍처 : http://upload-images.jianshu.io/upload_images/966283-78b410b9af8b18fa.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240

당신을 도울 수 있기를 바랍니다!


MVVMCross 라는 프로젝트가 하나 있습니다 .

Stuart Lodge에서 개발 한 무료 오픈 소스이며 잘 설계된 MVVM 프레임 워크입니다.

그는 Android 및 iPhone에 대한 바인딩을 구현 했으므로 이제 MVVM을 이러한 모든 플랫폼에도 적용 할 수 있습니다.

저에게는 최고의 MVVM 프레임 워크 중 하나입니다. 실제로 MVVM의 힘을 보여줍니다. 이를 통해 다양한 플랫폼 (WP7, Android, iPhone, WinRT)에 대해 하나의 코드 (모델 및 뷰 모델 레이어)를 작성하고 애플리케이션 UI (뷰 레이어) 만 변경할 수 있습니다.


관심을 가질만한 다른 사람들에게 참고로 게시하기 위해. 저는 Android 플랫폼을위한 데이터 바인딩 프레젠테이션 모델 프레임 워크 인 RoboBinding 의 기고자 입니다. 동일한 목적을위한 또 다른 프레임 워크입니다. 프로젝트 구조를 돕는 것 외에도 RoboBinding의 주요 초점 중 하나는 Android 단위 테스트 대신 일반 JUnit 테스트로 Android 앱을 테스트하는 것입니다. 단위 테스트는 프로젝트의 품질을 보장하는 데 매우 중요하지만 Android 단위 테스트는 실행하는 데 오래 걸립니다. 단위 테스트를 다소 비현실적으로 만듭니다. RoboBinding 자체에는 품질을 보장하기 위해 300 개 이상의 JUnit 테스트가 함께 제공됩니다. MVVMMartin Fowler가 소개 한 프레젠테이션 모델 디자인 패턴의 전문화로 Microsoft에서 시작되었습니다. 기타 대안 : Android-Binding, Bindroid 및 MvvmCross.


Fragments의 DataBinding에 대해 다음 단계를 수행 할 수 있습니다. 예제에서 Fragment의 데이터 바인딩에 대한 디자인과 Java 클래스를 모두 게시했습니다.

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:bind="http://schemas.android.com/apk/res-auto">
    <data class=".UserBinding">
        <variable  name="user" type="com.darxstudios.databind.example.User"/>
    </data>
 <RelativeLayout

    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivityFragment"
    >



        <TextView android:text='@{user.firstName+"  "+user.lastName}' android:layout_width="wrap_content"
        android:layout_height="wrap_content"
            android:id="@+id/textView" />

     <Button
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="New Button"
         android:id="@+id/button"
         android:layout_below="@+id/textView"
         android:layout_toEndOf="@+id/textView"
         android:layout_marginStart="40dp"
         android:layout_marginTop="160dp" />

 </RelativeLayout>
</layout>


    public class MainActivityFragment extends Fragment {

    public MainActivityFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        final User user = new User();
        user.setFirstName("Michael");
        user.setLastName("Cameron");
        UserBinding binding = DataBindingUtil.inflate(inflater,R.layout.fragment_main, container, false);
        binding.setUser(user);

        View view = binding.getRoot();

        final Button button = (Button) view.findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                user.setFirstName("@Darx");
                user.setLastName("Val");
            }
        });

        return view;
    }

}

개발자 사이트 데이터 바인딩 가이드 라인


Android Data Binding 라이브러리를 사용하여 MVVM에 대해 작성된 Writing Testable Android MVVM 앱 시리즈가 정말 좋습니다. 시리즈에서 그는 간단한 예제에서 recyclerview까지 설명했으며 테스트도 있습니다.

mv2m 라이브러리사용해 볼 수 있습니다.


github에는 MVVM 프레임 워크에 대한 많은 예제가 있습니다. DroidWizard 사용을 권장합니다.

DroidWizard does its own coupling between view and view model and the framework is slightly different from mvvm.

ModelEngine ViewModel View instean of Model ViewModel View


https://github.com/MindorksOpenSource/android-mvvm-architecture

Android MVVM Architecture: Sample App

This repository contains a detailed sample app that implements MVVM architecture using Dagger2, Room, RxJava, FastAndroidNetworking, PlaceHolderView and AndroidDebugDatabase

The app has following packages:

data: It contains all the data accessing and manipulating components.
di: Dependency providing classes using Dagger2.
ui: View classes along with their corresponding ViewModel.
utils: Utility classes.

참고URL : https://stackoverflow.com/questions/4972927/android-mvvm-design-pattern-examples

반응형