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     }

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

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

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

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

  • 相关阅读:
    Rotation Kinematics
    离职 mark
    PnP 问题方程怎么列?
    DSO windowed optimization 代码 (4)
    Adjoint of SE(3)
    IMU 预积分推导
    DSO windowed optimization 代码 (3)
    DSO windowed optimization 代码 (2)
    OKVIS 代码框架
    DSO windowed optimization 代码 (1)
  • 原文地址:https://www.cnblogs.com/fsbr/p/6612842.html
Copyright © 2011-2022 走看看