2017-10-10 22 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; 
} 
} 

レイアウト

<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のモデル、ビューとのviewmodelために別のディレクトリを作っている、それだけでdirecotryを作るのです違うか何?私は明確な概念を持っていない。

答えて

1

いいえ、パッケージに関するものではありません。アーキテクチャは抽象化のために不可欠です。 MVVMまたはMVP(どちらも同じではありません)は、ビジネスレイヤーとビューレイヤーの抽象化に役立ちます。

ここで詳しく説明しませんが、あなたはそれについてブログを読むことができます。

MVVMは、データバインド、LiveDataまたはRXオブザーバブルなどのオブザーバブルを使用する場合に最も便利です。 viewModelの値を変更するだけで、変更がUIに反映されます。 textView.setText()を何度も何度も使用する必要はありません。

オクラホマので、活動で構成されてい

ビューはViewModelにがモデルをラップし、必要な観察可能なデータを準備する責任がある

など、断片、(物事をシンプルに保つみましょう)さんが故障してみましょうビューによって。ビューがモデルにイベントを渡すためのフックも提供します。しかし、ViewModelはビューに結びついていません。これにはインタフェースViewModelと、さまざまなアクティビティに関連付けられた異なるViewModelが含まれています。ここにアンドロイドへのリンクがありますViewModel

モデルは、アプリケーションのデータと状態を保持しています。

これらの説明はどこにでもあります。最も重要な部分は、なぜこれらのアーキテクチャを使用すべきかです。

セイたとえば、あなたが別のテキストフィールドに使用すると、2つのテキストフィールドに与えられた値の合計を計算する必要があるアプリ、textAtextBを持ってtextC

あなたはモデルクラスが必要ですのデータを格納し、表示または保存します。

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のもう1つの大きな点は、ビューモデルが単体テストに非常に簡単だということです。

+0

私はここで少し明確になった、私はfull.is MVVM MVPよりもうまくいっている? – Ghimire

関連する問題