阿里八八“好记”——系统设计
代码规范
命名规范
- 控件缩写
控件 | 缩写 | 控件 | 缩写 |
---|---|---|---|
TextView | text | ProgressBar | bar |
EditText | edt | SeekBar | seek |
Button | btn | CheckBox | chk |
ImageButton | ibtn | Spinner | spin |
ImageView | img | TableLayout | table |
ListView | list | TableRow | row |
RadioGroup | group | LinearLayout | llayout |
RadioButton | rbtn | RelativeLayout | rlayout |
ScrollView | scroll | SearchView | search |
TabHost | host | TabWidget | widget |
- 局部变量命名
{范围描述+}意义描述+类型描述 的组合,用驼峰式,首字母小写。
例子:
private TextView headerTitleText; // 标题栏的标题
private Button loginBtn; // 登录按钮
- 静态变量命名
全部为大写单词,单词之间用下划线分开。
例子:
public final static int PAGE_SIZE=20;
- 类成员变量命名
{范围描述+}意义描述+类型描述的组合,用驼峰式。
private TextView HeaderTitleText; // 标题栏的标题
private Button LoginBtn; // 登录按钮
- 类命名
使用大驼峰规则,用名词或名词词组命名,每个单词的首字母大写。 以下为几种常用类的命名:
activity 类,命名以 Activity 为后缀,如:LoginActivity,放在根目录下。
fragment 类,命名以 Fragment 为后缀,如:DialogFragment,放在 fragment文件夹下。
service 类,命名以 Service 为后缀,如:DownloadService,放在 service 文件夹下。
adapter 类,命名以 Adapter 为后缀,如:CouponListAdapter,放在 adapter 文件夹下。
canvas 类,命名以 canvas 为后缀,如 StepCanvas,放在 Canvas 文件夹下。
painter 类,命名以 Painter 为后缀,如 ShapePainter,放在 Painter 文件夹下。
基础类,命名以 base 为后缀,如 CanvasBase,放在 Base 文件夹下。
通用类,如简单的自定义控件、辅助类,放在 common 文件夹下。
- 方法命名
使用小驼峰规则,用动词命名,第一个单词的首字母小写,其他单词的首字母大写。
以下为几种常用方法的命名:
初始化方法,命名以 init 开头,例:initView()。
按钮点击方法,命名以 on 开头,Click 结尾,例:onLoginClick()。
设置方法,命名以 set 开头,例:setData()。
具有返回值的获取方法,命名以 get 开头,例:getData()。
通过异步加载数据的方法,命名以 load 开头,例:loadData()。
布尔型的判断方法,命名以 is 或 has,例:isEmpty()
- layout 命名
组件类型_{范围_}功能,范围可选,以下为几种常用的组件类型命名:
activity_{范围_}功能,为 Activity 的命名格式。
fragment_{范围_}功能,为 Fragment 的命名格式。
dialog_{范围_}功能,为 Dialog 的命名格式。
item_list_{范围_}功能,为 ListView 的 item 命名格式。
item_grid_{范围_}功能,为 GridView 的 item 命名格式。
header_list_{范围_}功能,为 ListView 的 HeaderView 命名格式。
footer_list_{范围_}功能,为 ListView 的 FooterView 命名格式
书写规范
- 括号
花括号不要单独一行,和它前面的代码同一行。而且,花括号与前面的代码之间用一个空格隔开。
public void method() {
}
- 空格
if、else、for、switch、while等逻辑关键字与后面的语句留一个空格隔开。
if(boolVar) {
} else {
}
运算符两边各用一个空格隔开。
int c = a + b;
方法的每个参数之间用一个空格隔开。
public void method(String param1, String param2);
method(param1, param2)
缩进统一使用4个空格,因为不同编辑器对tab显示不同。
- 空行
空行之空一行,不要多空行。在一下情况需要用一个空行:
1、两个方法之间
2、方法内的两个逻辑段之间
3、方法内的局部变量和方法的第一条逻辑语句之间。
4、常量与变量之间
- 其他
1、应用中的字符串同一在strings.xml中定义,然后在代码和布局文件中引用。
2、一行声明一个变量,不要一行声明多个变量,这样有利于注释。
private String param1;
private String param2;
3、当一个表达式无法容纳在一行内时,可换行显示,另起的新行用八个空格缩进。
someMethod(longExpression1, longExpression2
longExpression3,longExpression4)
注释规范
- 文件头注释
文件顶部统一添加版权声明,声明格式如下:
/**
* 2017/10/16
* Copyright (c) Jun yu Inc. All rights reserved
*/
- 类和接口的注释
类和接口统一添加注释,格式如下:
/**
*类或接口的描述信息
*/
- 方法注释
方法同一添加注释,说明用途,参数说明和返回值说明。
/**
*登录
*
*@param loginName 登录名
*@param password 密码
*/
- 变量与常量注释
下面几种情况的变量和常量,都要添加注释,有限采用右侧//来注释,若注释太长则在上方添加注释。
1、接口中定义的所有常量
2、公有类的公有常量
3、枚举类定义的所有枚举常量
4、实体类的所有属性变量
public static final int TYPE_CASH = 1; //现金券
public static final int TYPE_DEBIT = 2; //折扣券
private int id; //券id
private String name //券名称
总结
制定代码规范“看似表面文章,实则非常重要”,合理的代码规范有助于团队开发过程有更高的效率,因此我们遵循简明,易读,无二义性的原则制定了我们团队的代码规范,主要体现在:
1、变量名和方法名用小驼峰规则,一眼就能看出它的作用,简洁明了。
2、括号和运算符加空格,整体代码看起来更工整舒服。
3、注释采用javadoc注释格式,能让其他人快速看懂方法和接口的作用,增强了代码的可读性,使代码改写和维护更加方便。
数据库ER图
解释:
ActivityTime:活动时间
Activity:活动内容
Clock:闹钟(提醒时间)
ActivityClass:活动类型
ActivityTitle:活动标题
PhoneNum:手机号
Id:日程编号
UserName:用户名
PhoneNum:手机号
PassWord:密码
QQ:qq号
WeiBo:微博号
Picture:头像
后端架构设计
主要功能描述
在Android开发中,Activity并不是一个标准的MVC模式中的Controller,它 的首要职责是加载应用的布局和初始化用户界面,并接受并处理来自用户的操作请求,进而作出响应。随着界面及其逻辑的复杂度不断提升,Activity类的 职责不断增加,以致变得庞大臃肿。当我们将其中复杂的逻辑处理移至另外的一个类(Presneter)中时,Activity其实就是MVP模式中 View,它负责UI元素的初始化,建立UI元素与Presenter的关联(Listener之类),同时自己也会处理一些简单的逻辑(复杂的逻辑交由 Presenter处理)。
View不直接与Model交互,而是通过与Presenter交互来与Model间接交互,Presenter与View的交互是通过接口来进行的,更有利于添加单元测试,通常View与Presenter是一对一的,但复杂的View可能绑定多个Presenter来处理逻辑。
1.用户登录注册
2.手动添加日程事件
3.语音识别添加日程事件
4.图像识别提取日程信息
5.完善和修改用户信息
MVP框架
模型(Model):数据层为UI层提供的数据,或者保存UI层传下来的数据负责对数据的存取操作,比如存储、检索、操纵数据。
视图(View):显示数据(model)并且将用户指令(events)传送到presenter以便作用于那些数据的一个接口。负责绘制UI元素、与用户进行交互(在Android中体现为Activity)View,通常含有Presenter的引用。
Presenter:作为View与Model交互的中间纽带,处理与用户交互的负责逻辑。View与Model并不直接交互,而是通过与Presenter交互来与Model间接交互。Presenter层会从Model层获得所需要的数据,进行一些适当的处理后交由View层进行显示。这样通过Presenter将View与Model进行隔离,使得View和Model之间不存在耦合,同时也将业务逻辑从View中抽离。
选用该框架的原因有如下几点:
1.模型与视图完全分离,我们可以修改视图而不影响模型。分离了视图逻辑和业务逻辑,降低了,耦合。
2.所有的交互都发生在一个地方——Presenter内部,高效地使用模型。
3.Presenter 被抽象成接口,可以有多种具体的实现,所以方便进行单元测试
4.Activity 代码变得更加简洁
数据库模型
文件目录模型
分而治之
Alpha版本WBS图
Issues任务认领结果
TODO List
102:好记整体框架绘制
513:用户基本界面绘制+用户基本功能实现
427:用户基本界面绘制+用户基本功能实现
124:用户基本界面绘制+用户基本功能实现
538:后台数据库搭建
118:日程表单日显示界面绘制
529:日程表多日自由定制显示
500:文本日程输入
分工比例
叶文滔:
李嘉群:
张岳:
俞鋆:
刘晓:
黄梅玲:
王国超:
林炜鸿: