zoukankan      html  css  js  c++  java
  • 对搭档代码的一些意见

    和搭档一起学,这几天他写了一个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     }

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

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

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

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

  • 相关阅读:
    周总结三
    重大技术需求系统四
    重大技术需求系统三
    重大技术需求系统二
    重大技术需求系统
    周总结(二)
    MJExtension框架介绍
    iOS 中捕获程序崩溃日志
    又是一年1111
    NSAssert的使用
  • 原文地址:https://www.cnblogs.com/fsbr/p/6612842.html
Copyright © 2011-2022 走看看