2017-10-10 3 views
0

실제로 MVVM이 무엇인지 이해할 수 없습니까 ??어떻게 아래 코드가 MVVM을 따르는 지 알 수 있습니까?

코드 클리너 또는 디자인 패턴과 같은 것을 작성하는 유일한 방법은, 실제로 MVVM이 무엇인지 이해할 수 없습니다.

나는 간단한 튜토리얼을 통해 작업을 해왔다. 나는 언제나 DataBinding을 사용했었다. MVVM을 따르지 않았다는 것을 어떻게 구별 할 수 있을까?

여기에 간단한 질문이 있는데, 예를 들어 Clear Answer가 표시되기를 기대합니다.

MainActivity

public class MainActivity extends AppCompatActivity { 


    ActivityMainBinding activityMainBinding; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main); 

     User user = new User("Android", "ios", "Blackberry"); 
     activityMainBinding.setVariable(user); 



    } 
} 

모달 클래스

public class Client { 
    String name; 


public Client(String name) { 
    this.name = name; 
} 

public String getName() { 
    return name; 
} 
} 

레이아웃

단지 direcotry을 만드는 그 것이다,
<data> 

    <variable 
     name="variable" 
     type="com.example.user_pc.databinding.User" /> 

</data> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <TextView 
     android:id="@+id/firstName" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:paddingBottom="30dp" 
     android:text="@{variable.firstName}" 

     /> 

    <TextView 
     android:id="@+id/middleName" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:paddingBottom="30dp" 
     android:text="@{variable.middleName}" /> 

    <TextView 
     android:id="@+id/lastName" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:paddingBottom="30dp" 
     android:text="@{variable.lastName}" /> 


</LinearLayout> 

이것은 간단한 질문 것으로 보인다하지만 난 MVVM을 이해하기 위해 고군분투하고 일 flow.All 모델, 뷰와 뷰 모델을 위해 다른 디렉토리를 만들고 있어요 다르거 나 뭐? 나는 명확한 개념이 없다.

답변

1

아니요, 패키지가 아닙니다. 아키텍처는 추상화에 필수적입니다. MVVM 또는 MVP (둘 다 동일하지 않음)는 비즈니스 계층과 뷰 계층을 추상화하는 데 도움이됩니다.

여기서는 자세히 설명하지 않겠습니다. 블로그를 읽을 수는 있습니다.

MVVM은 데이터 바인딩, LiveData 또는 RX 관찰 가능 항목과 같은 관찰 가능 항목을 사용할 때 가장 유용합니다. viewModel의 값을 변경하면 변경 사항이 UI에 반영됩니다. textView.setText()을 몇 번이고 다시 사용할 필요가 없습니다.

좋아, 그래서 의 ViewModel 필요 관측 데이터 모델을 포장하고 준비에 대한 책임 등의보기 활동, 조각으로 구성되어

(의 간단한 일을 계속하자) 분해

하자 보기에 의해. 또한보기가 모델에 이벤트를 전달할 수 있도록 후크를 제공합니다. 그러나 ViewModel은 뷰에 연결되지 않습니다. ViewModel 인터페이스와 다양한 액티 버티에 관련 지을 수 있었던 ViewModel를 포함합니다. 다음은 안드로이드에 대한 링크입니다 ViewModel

모델은 앱의 데이터와 상태를 보유하고 있습니다.

어디에서나이 설명을 찾을 수 있습니다. 가장 중요한 부분은 이러한 아키텍처를 사용해야하는 이유입니다.

는 는 는

당신이 값의 합은 두 개의 텍스트 필드에서 제공하는 계산이 응용 프로그램을 가지고 예를 들어 말, 다른 텍스트 필드에 textA 및 textBtextC는

당신은 모델 클래스가 필요 을 합쳐 데이터를 저장하고 표시하거나 저장하십시오.

public class Sum{ 
public int num1,num2,sum;// make these observable. 
} 

은의이 어려운 문제를 가정하자, 당신은 처음에는 비즈니스 로직에 단지 집중 싶어요, 성공적으로 로직을 구현 한 후, 당신은 당신의 견해를 변화로 이동합니다.

그래서, 당신은

public class SumViewModel extends ViewModel{ 
// implement other required methods and variables, if possible LiveData. 
// either you can use Databinding Observable, and share the same Sum object in 
// View and ViewModel or you can use LiveData as shown in the link. 
Sum s; 
public void onSumPressed(int a, int b){ 
s.num1 = a; 
s.num2 = b; 
s.sum = a+b; 
} 
public void clearPressed(){ 
s.num1=0; 
s.num2=0; 
s.sum=0; 
} 
} 

그래서, 당신은 성공적으로 비즈니스 로직을 구현 한 당신의 ViewModel 클래스를 작성합니다. 휴! 이제보기에 집중할 시간입니다.

public class SumActivity extends AppcompatActivity{ 
    Sum s;// as discussed, you can make this observable. 
private SumViewModel model; 
private ActivitySumBinding binding; 
onCreate(){ 
... 
model = ViewModelProviders.of(this).get(SumViewModel.class); 
int a = Integer.parseInt(binding.text1.getText().toString()); 
int b = Integer.parseInt(binding.text2.getText().toString()); 
binding.sumBtn.setOnclickListener(v-> model.onSumPressed(a,b)); 
//Now, since the object s is being obseverd, data will be changed in the view accordingly. 
... 
} 

} 

이 프로그램은 데모 전용입니다.

주요 일정에 주목 해 주시기 바랍니다. 우리는 목표를 깨고 한 번에 하나씩 집중합니다. 먼저 비즈니스 로직을 구현 한 다음 적절한 뷰 변경을 수행하십시오. 또한 새로운 요구 사항을 조정하는 것은 방법을 계속 추가해야하기 때문에 매우 쉽습니다.

MVVM에 대한 또 다른 멋진 점은 View Model이 이제 단위 테스트를 매우 쉽게 할 수 있다는 것입니다.

+0

여기에 약간의 설명이 있습니다. 나는 MVP보다 MVVM이 뛰어납니다. – Ghimire

관련 문제