# SimpleMVC **Repository Path**: MaYunAimeeChen/SimpleMVC ## Basic Information - **Project Name**: SimpleMVC - **Description**: MVC入门简单例子 - **Primary Language**: Android - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2020-04-18 - **Last Updated**: 2023-03-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MVC入门学习笔记 #### 一.MVC模型简介 MVC的全名是Model View Controller, 即模型(Model)-视图(View)-控制器(Controller)。 ![输入图片说明](https://images.gitee.com/uploads/images/2020/0418/193211_31e0336e_1092664.png "屏幕截图.png") 注:箭头代表的是事件的传递方向 例如:点击View,事件就会传递到Activity,也就是Controller,然后Controller再通知Model来进行数据的获取,Model再通知View来进行界面展示工作。 Controller -> Model:让Controller持有Model的引用 Model -> View:通过注册监听的方式实现,比如callback #### 二.使用MVC实现 ![输入图片说明](https://images.gitee.com/uploads/images/2020/0418/193242_0d0200d9_1092664.png "屏幕截图.png") 1)MVCActivity.java ``` public class MVCActivity extends AppCompatActivity { @BindView(R.id.et_account) EditText etAccount; @BindView(R.id.btn_search) Button btnSearch; @BindView(R.id.tv_result) TextView tvResult; private MVCModel mvcModel; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_mvc); ButterKnife.bind(this); mvcModel = new MVCModel(); } @OnClick(R.id.btn_search) public void onViewClicked() { /* * 把数据传给Model,让Model进行数据处理,然后Model处理完后,通过CallBack将结果返回,然后进行界面更新 */ mvcModel.getAccountData(getUserInput(), new ResultCallBack() { @Override public void onSuccess(Account account) { showSuccessPage(account); } @Override public void onFail() { showFailPage(); } }); } private String getUserInput() { return etAccount.getText().toString(); } private void showSuccessPage(Account account) { tvResult.setText(String.format(getResources().getString(R.string.str_result_name_and_level), account.getName(), account.getLevel())); } private void showFailPage() { tvResult.setText(R.string.str_get_data_fail); } } ``` 2)MVCModel.java ``` /** * MVC的Model层,用来进行数据处理 */ public class MVCModel { public void getAccountData(String accountName, ResultCallBack resultCallBack) { Random random = new Random(); boolean isSuccess = random.nextBoolean(); if (isSuccess) { Account account = new Account(); account.setName(accountName); account.setLevel(100); resultCallBack.onSuccess(account); } else { resultCallBack.onFail(); } } } ``` 3)ResultCallBack.java ``` public interface ResultCallBack { public void onSuccess(Account account); public void onFail(); } ``` 4)Account.java ``` public class Account { private String name; private int level; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getLevel() { return level; } public void setLevel(int level) { this.level = level; } } ``` #### 三.MVC优缺点 优点:一定程度上实现了Model与View的分离,降低了代码的耦合性。 缺点:Controller与View难以完全解耦(Activity即是控制器,又要承担部分视图层的工作),并且随着项目负责的的提升,Controller将越来越臃肿。 ![输入图片说明](https://images.gitee.com/uploads/images/2020/0418/193418_414709e6_1092664.png "屏幕截图.png") #### 四.参考资料 慕课网学习资料:https://www.imooc.com/learn/1177