这怎么可能让下面的代码跟随MVVM或不是?
我无法理解MVVM究竟是什么?这怎么可能让下面的代码跟随MVVM或不是?
它是唯一的方法来确定代码清理器或类似设计模式,我不能理解什么是MVVM。
我已经制定了一个简单的教程,因为我一直使用DataBinding。如何区分它没有遵循MVVM?
我在这里得到简单的问题,希望我会得到明确的答案与示例。
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正在不同的目录中的模型,视图和视图模型,它是只让direcotry的不同还是什么?我没有清楚的概念。
不,这不是包装。架构对于抽象是至关重要的。 MVVM或MVP(两者都不相同)有助于抽象业务层和视图层。
我不会在这里详细说明,你可以阅读博客。
当你使用observables,比如在数据绑定,LiveData或RX observables中时,MVVM是最有用的。您只需更改viewModel中的值,并且更改将反映在UI中。您不必一次又一次地使用 textView.setText()。
好了,让我们打破(让我们保持简单的事情)
查看包括活动,碎片等
的视图模型负责包装的型号和准备需要观察数据由视图。它还为视图提供了将事件传递给模型的钩子。然而,ViewModel并不依赖于视图。它包含一个接口ViewModel和与不同活动关联的不同ViewModel。这是一个链接到Android ViewModel
模型保存应用程序的数据和状态。
您可以在任何地方找到这些说明。最重要的部分是为什么我们应该使用这些架构?
比方说你有一个应用程序,在那里你必须计算值的总和在两个文本字段提供,TEXTA和TEXTB到另一个文本字段textC
你需要一个Model类总和存储数据并显示或保存。
public class Sum{
public int num1,num2,sum;// make these observable.
}
让我们假设这是一个棘手的问题,你会喜欢在第一次对你的业务逻辑只专注,并成功地实现逻辑之后,你会移动到改变你的看法。
所以,你写你的ViewModel类
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;
}
}
所以,您已成功实现的业务逻辑。唷!现在,您可以专注于您的观点了
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现在非常容易进行单元测试。
我在这里得到了一些澄清,我会挖掘full.is MVVM比MVP更好? – Ghimire