对搭档代码的一些意见

和搭档一起学,这几天他写了一个demo有关登录界面。我看了下,提出了一些个人的意见。

·代码

 1  protected void onCreate(Bundle savedInstanceState) {
 2         super.onCreate(savedInstanceState);
 3         setContentView(R.layout.activity_main);
 4         userName = (EditText) findViewById(R.id.userName);
 5         userPassword = (EditText) findViewById(R.id.password);
 6         sure = (Button) findViewById(R.id.sure);
 7         sure.setOnClickListener(new android.view.View.OnClickListener() {
 8             @Override
 9             public void onClick(android.view.View view) {
10                 String name = userName.getText().toString();
11                 String password = userPassword.getText().toString();
12                 Stu user = new Stu(name, password);
13                 if (presenter.login(user)) {
14                     Log.i("ok", "1");
15                 } else {
16                     Log.i("no", "2");
17                 }
18                                     
19 
20             }
21         });
22     }

乍一看,其实并没有什么问题,然而仔细想想,觉得有点不妥。大致有以下:

userName = (EditText) findViewById(R.id.userName);
userName.setOnClickListener(this);
//大型项目里,往往控件很多,像这样的话,代码量会很多。在这里使用butterknife。
@BindView(R.id.userName);
EditText et;
void dosmething(){
//dosomething
}

在回来看,我们往往会合并项目,并且所有完成后还要测试。以这种方式写的话,一些功能的实现都写在onCreate()里,导致很累赘,按我们所想,其实它应该只负责加载界面而已。

而且那样,不仅测试麻烦,而且看起来很累赘。所以我们尝试用mvp模式来做一下整改。

关于mvp思想可以参考:http://blog.csdn.net/vector_yi/article/details/24719873

 

1.先建立项目包的结构

2.着一分析

model层:数据,实体类;

 

view层:
顾名思义,就是负责视图层,主界面在里面。

 

最后来看presenter层:
其实就相当于控制层吧,将view层与model层交互,原本在onCreate()做的数据交互、处理,都可以挪到presenter层,
在presenter层处理完后的结果让view层再回调。这样分工明确。

·presenter类
 1 public boolean login(Stu user) {
 2         Retrofit retrofit = new Retrofit.Builder()
 3                 .baseUrl(API)
 4                 .addConverterFactory(GsonConverterFactory.create())
 5                 .build();
 6         GetService service = retrofit.create(GetService.class);
 7         Call call = service.post(user);
 8         call.enqueue(new Callback<Object>() {
 9             @Override
10     public void onResponse(
11             Call<Object> call, Response<Object> response) {
12         //   Log.i("response", "11111111111111111");
13         flag = true;
14 
15     }
16 
17     @Override
18     public void onFailure(Call<Object> call, Throwable t) {
19         //      Log.i("failed", "failed");
20         flag = false;
21     }
22 
23 });
24         return flag;
25         }

mainActivity类

 1 presenter = new Presenter();
 2         sure.setOnClickListener(new android.view.View.OnClickListener() {
 3                                     @Override
 4                                     public void onClick(android.view.View view) {
 5                                         String name = userName.getText().toString();
 6                                         String password = userPassword.getText().toString();
 7                                         Stu user = new Stu(name, password);
 8                                         if (presenter.login(user)) {
 9                                             Log.i("ok", "1");
10                                         } else {
11                                             Log.i("no", "2");
12                                         }
13                                     }
14                                 }
15 
16         );
17     }

测试也更明确,也方面拓展维护。

当然小项目还是不完全能体现其优势的。

 当然,之后还发现他有的方法以及属性还沿用着官方淘汰的,本人是建议不再用比较好,以免节外生枝。

 

关于宽度高度的尺寸,尽量用自适应属性,而不用固定值,主要是为了方便真机测试适配问题。

 

posted @ 2017-03-24 18:12  SilentXZP  阅读(170)  评论(0编辑  收藏  举报