对搭档代码的一些意见

和搭档一起学,这几天他写了一个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     }
测试也更明确,也方面拓展维护。

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

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

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

时间: 2024-08-07 08:07:45

对搭档代码的一些意见的相关文章

对搭档代码的修改意见

源代码 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:paddingBottom="@dimen/activity_vertical_margin" 4 android:paddingLeft="

结对编程——关于搭档代码的分析

一.个人项目需求 命令行输入用户名和密码,两者之间用空格隔开(程序预设小学.初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,XX为小学.初中和高中三个选项中的一个.否则提示“请输入正确的用户名.密码”,重新输入用户名.密码: 登录后,系统提示“准备生成XX数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录):”,XX为小学.初中和高中三个选项中的一个,用户输入所需出的卷子的题目数量,系统默认将根据账号类型进行出题.每道题目的操作数

优美的代码也是一种艺术

几个月前我完全没有要将代码写得优美漂亮的想法,直到看到一段非常优美的代码. 为什么要将代码写得优美?因为优美的代码意味着稳定.高效.易读,一段充满未知bug或者冗长罗嗦的代码绝对算不上优美的代码.优美的代码还有一个很重要的作用:让作者感到愉悦.每一个爱好技术的人绝对会因为自己技术上的成就感到身心愉悦.稳定的重要性不言而喻,要做到足够稳定就需要尽可能地去预判代码中可能出现的异常,要做到"尽可能"就需要不断地积累经验和学习他人优秀的编码风格.高效是继稳定之后另一个非常重要的影响用户体验的因

实习以来 唯一一次 没有因需求变更 代码被改面目全非的一次(期待各位对代码细节提提建议)

according the source and template to genetate bulk file.(there is four type diff source and template now.) 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using Ric.Core; 6 using System.ComponentModel;

《构建之法》第四章

<构建之法>第四章讲的是两个人的合作.结对编程.结对编程往往只需花费大约一半的时间就能编写出质量更高的代码. 代码规范方面,在给函数或者类取名的时候要严谨,不能写一些没意义的名称:在一些代码后面可以加些注释来说明此行代码的作用,在复审方面,我觉得自我复审时最好的,刚写好的代码脑袋里印象深刻,能很好的解决逻辑错误和算法错误. 结对编程方面,书中生动形象的说明了开发者的搭档关系,在结对的时候怎么分配任务,怎么通力合作.互相帮助,在两人的合作过程中,怎么磨合.互相提高水平,在遇到问题或者矛盾的时候,

根据实例探讨源代码管理

现代软件产业经过几十年的发展,一个软件有一个人完成的情况已经几乎不可见了,软件都是在相互合作中完成的.合作的最小单位是两人.两人一起看代码并发表意见. 代码风格规范: 简明,易读,无二义性(缩进,行宽,括号,断行与空白的{}行,分行,命名,下划线,大小写,注释) 代码设计规范: 函数,goto,错误处理,如何处理C++中的类(类,class vs.struct,公共/保护/私有成员,数据成员,虚函数,构造函数,析构函数,new和delete,运算符,异常,类型继承) 代码复审: 1.找出代码的错

实现键值对存储(三):Kyoto Cabinet 和LevelDB的架构比较分析

译自  Emmanuel Goossaert (CodeCapsule.com) 在本文中,我将会逐组件地把Kyoto Cabinet 和 LevelDB的架构过一遍.目标和本系列第二部分讲的差不多,通过分析现有键值对存储的架构来思考我应该如何建立我自己键值对存储的架构.本文将包括: 1. 本架构分析的意图和方法 2. 键值对存储组件概览 3. Kyoto Cabinet 和LevelDB在结构和概念上的分析 3.1 用Doxygen建立代码地图 3.2 整体架构 3.3 接口 3.4 参数化

code review(互审)

搭档代码的评审 package Question; public class Q2 { private int maxRevolution; private int Revolution; private int gears; private double dia; private String colour; private String state; public Q2() { } public Q2(int maxRevolution, int revolution, int gears,

TOP计划猿10最佳实践文章

本文转自:EETproject教师专辑 http://forum.eet-cn.com/FORUM_POST_10011_1200263220_0.HTM?click_from=8800111934,6106462476,2014-04-18,EECOL,NEWSLETTER watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTGVleGlhb2JpYW8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/diss