热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

提升Android开发效率:CleanCode的最佳实践与应用

在Android开发中,提高代码质量和开发效率是至关重要的。本文介绍了如何通过CleanCode的最佳实践来优化Android应用的开发流程。以SQLite数据库操作为例,详细探讨了如何编写高效、可维护的SQL查询语句,并将其结果封装为Java对象。通过遵循这些最佳实践,开发者可以显著提升代码的可读性和可维护性,从而加快开发速度并减少错误。

下面是直接使用SQL语句根据id查询Android SQLite数据库的例子.  



需要自己写sql语句, 自己手动获取结果并装成目标Javabean.

public Tb_outaccount find(int id) {
// db = helper.getWritableDatabase();// 初始化SQLiteDatabase对象Cursor cursor = dbRead.rawQuery("select _id,money,time,type,address,mark from tb_outaccount where _id = ?",new String[] { String.valueOf(id) });// 根据编号查找支出信息,并存储到Cursor类中// int ColumnCount=cursor.getColumnCount();
// String ColumnNames[]=cursor.getColumnNames();if (cursor.moveToNext())// 遍历查找到的支出信息{// 将遍历到的支出信息存储到Tb_outaccount类中return new Tb_outaccount(cursor.getInt(cursor.getColumnIndex("_id")),cursor.getDouble(cursor.getColumnIndex("money")),cursor.getString(cursor.getColumnIndex("time")),cursor.getString(cursor.getColumnIndex("type")),cursor.getString(cursor.getColumnIndex("address")),cursor.getString(cursor.getColumnIndex("mark")));}return null;// 如果没有信息,则返回null}

存在的问题:


以下是使用ORM Bee框架, 重构后, 前后对比的效果代码. 


大大简化了类似重复代码; 提高了编码效率.  不需要每个表都写一遍.

package com.lib.accountsoft.dao;import java.util.List;import org.teasoft.bee.osql.FunctionType;
import org.teasoft.bee.osql.MoreTable;
import org.teasoft.bee.osql.SuidRich;
import org.teasoft.honey.osql.shortcut.BF;
import org.teasoft.honey.util.StringUtils;import com.lib.accountsoft.model.Tb_inaccount;public class InaccountDAO {
// private SQLiteDatabase db=DBOpenHelper.getWritableDB();// 创建SQLiteDatabase对象private SuidRich suidRich=BF.getSuidRich(); //获取SQLiteDatabase,由Bee代劳public InaccountDAO() {}/*** 添加收入信息* * @param tb_inaccount*/public void add(Tb_inaccount tb_inaccount) {// 执行添加收入信息操作
// db.execSQL(
// "insert into tb_inaccount (_id,money,time,type,handler,mark) values (?,?,?,?,?,?)",
// new Object[] { tb_inaccount.getid(), tb_inaccount.getMoney(),
// tb_inaccount.getTime(), tb_inaccount.getType(),
// tb_inaccount.getHandler(), tb_inaccount.getMark() });suidRich.insert(tb_inaccount);}/*** 更新收入信息* * @param tb_inaccount*/public void update(Tb_inaccount tb_inaccount) {// 执行修改收入信息操作
// db.execSQL(
// "update tb_inaccount set money = ?,time = ?,type = ?,handler = ?,mark = ? where _id = ?",
// new Object[] { tb_inaccount.getMoney(), tb_inaccount.getTime(),
// tb_inaccount.getType(), tb_inaccount.getHandler(),
// tb_inaccount.getMark(), tb_inaccount.getid() });suidRich.update(tb_inaccount);}/*** 查找收入信息* * @param id* @return*/public Tb_inaccount find(int id) {// Cursor cursor = db
// .rawQuery(
// "select _id,money,time,type,handler,mark from tb_inaccount where _id = ?",
// new String[] { String.valueOf(id) });// 根据编号查找收入信息,并存储到Cursor类中
// if (cursor.moveToNext())// 遍历查找到的收入信息
// {
// // 将遍历到的收入信息存储到Tb_inaccount类中
// return new Tb_inaccount(
// cursor.getInt(cursor.getColumnIndex("_id")),
// cursor.getDouble(cursor.getColumnIndex("money")),
// cursor.getString(cursor.getColumnIndex("time")),
// cursor.getString(cursor.getColumnIndex("type")),
// cursor.getString(cursor.getColumnIndex("handler")),
// cursor.getString(cursor.getColumnIndex("mark")));
// }
// return null;// 如果没有信息,则返回nullreturn suidRich.selectById(new Tb_inaccount(), id);}/*** 删除收入信息* * @param ids*/public void detele(Integer... ids) {
// if (ids.length > 0)// 判断是否存在要删除的id
// {
// StringBuffer sb = new StringBuffer();// 创建StringBuffer对象
// for (int i = 0; i // {
// sb.append('?').append(',');// 将删除条件添加到StringBuffer对象中
// }
// sb.deleteCharAt(sb.length() - 1);// 去掉最后一个“,“字符db = helper.getWritableDatabase();// 初始化SQLiteDatabase对象
// // 执行删除收入信息操作
// db.execSQL("delete from tb_inaccount where _id in (" + sb + ")",
// (Object[]) ids);
// }suidRich.deleteById(Tb_inaccount.class, StringUtils.toCommasString(ids));}/*** 获取收入信息* * @param start* 起始位置* @param size* 每页显示数量* @return*/public List getScrollData(int start, int size) {
// List tb_inaccount = new ArrayList();// 创建集合对象
// // 获取所有收入信息
// Cursor cursor = db.rawQuery("select * from tb_inaccount limit ?,?",
// new String[] { String.valueOf(start), String.valueOf(size) });
// while (cursor.moveToNext())// 遍历所有的收入信息
// {
// // 将遍历到的收入信息添加到集合中
// tb_inaccount.add(new Tb_inaccount(cursor.getInt(cursor
// .getColumnIndex("_id")), cursor.getDouble(cursor
// .getColumnIndex("money")), cursor.getString(cursor
// .getColumnIndex("time")), cursor.getString(cursor
// .getColumnIndex("type")), cursor.getString(cursor
// .getColumnIndex("handler")), cursor.getString(cursor
// .getColumnIndex("mark"))));
// }
// return tb_inaccount;// 返回集合return suidRich.select(new Tb_inaccount(), start, size);}/*** 获取总记录数* * @return*/public long getCount() {
// Cursor cursor = db
// .rawQuery("select count(_id) from tb_inaccount", null);// 获取收入信息的记录数
// if (cursor.moveToNext())// 判断Cursor中是否有数据
// {
// return cursor.getLong(0);// 返回总记录数
// }
// return 0;// 如果没有数据,则返回0return suidRich.count(new Tb_inaccount());}}


删除多余代码,  代码整洁高效多了!!

package com.lib.accountsoft.dao;import java.util.List;import org.teasoft.bee.osql.SuidRich;
import org.teasoft.honey.osql.shortcut.BF;
import org.teasoft.honey.util.StringUtils;import com.lib.accountsoft.model.Tb_inaccount;public class InaccountDAO {private SuidRich suidRich=BF.getSuidRich(); //获取SQLiteDatabase,由Bee代劳public InaccountDAO() {}/*** 添加收入信息* @param tb_inaccount*/public void add(Tb_inaccount tb_inaccount) {suidRich.insert(tb_inaccount);}/*** 更新收入信息* @param tb_inaccount*/public void update(Tb_inaccount tb_inaccount) {suidRich.update(tb_inaccount);}/*** 查找收入信息* @param id* @return*/public Tb_inaccount find(int id) {return suidRich.selectById(new Tb_inaccount(), id);}/*** 删除收入信息* @param ids*/public void detele(Integer... ids) {suidRich.deleteById(Tb_inaccount.class, StringUtils.toCommasString(ids));}/*** 获取收入信息* @param start 起始位置* @param size 每页显示数量* @return*/public List getScrollData(int start, int size) {return suidRich.select(new Tb_inaccount(), start, size);}/*** 获取总记录数* @return*/public long getCount() {return suidRich.count(new Tb_inaccount());}}

Bee V1.17将全面支持Android环境的数据库操作.


让你学一种ORM框架就可以在JavaWeb和Anddroid两种环境中使用.

-----------------------------------------------------------
 

Bee 是一个简单,易用,功能强大,开发速度快,编码少的 JAVA ORM 框架。连接,事务都可以由Bee框架负责管理. Bee 简化了与DB交互的编码工作量, 是 编码复杂度 为 O(1) 的Java 框架!

Bee简单易用:单表操作、多表关联操作,可以不用写sql,极少语句就可以完成SQL操作;概念简单,10分钟即可入门。
Bee功能强大:复杂查询也支持向对象方式,分页查询性能更高,一级缓存即可支持个性化优化;具有分布式特性。高级要求,还可以方便自定义SQL语句。

码云上的项目首页:

bee: 互联网新时代的Java ORM工具,简单、高效,开发速度快!

bee-springboot: Bee整合Spring Boot,让你瞬间拥有两样快速开发利器!

github:

https://github.com/automvc/bee

相关框架设计信息也可关注微信公众号:软件设计活跃区



推荐阅读
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 本文探讨了如何在C#应用程序中通过选择ComboBox项从MySQL数据库中检索数据值。具体介绍了在事件处理方法 `comboBox2_SelectedIndexChanged` 中可能出现的常见错误,并提供了详细的解决方案和优化建议,以确保数据能够正确且高效地从数据库中读取并显示在界面上。此外,还讨论了连接字符串的配置、SQL查询语句的编写以及异常处理的最佳实践,帮助开发者避免常见的陷阱并提高代码的健壮性。 ... [详细]
  • 本文深入解析了Java面向对象编程的核心概念及其应用,重点探讨了面向对象的三大特性:封装、继承和多态。封装确保了数据的安全性和代码的可维护性;继承支持代码的重用和扩展;多态则增强了程序的灵活性和可扩展性。通过具体示例,文章详细阐述了这些特性在实际开发中的应用和优势。 ... [详细]
  • 单链表的高效遍历及性能优化策略
    本文探讨了单链表的高效遍历方法及其性能优化策略。在单链表的数据结构中,插入操作的时间复杂度为O(n),而遍历操作的时间复杂度为O(n^2)。通过在 `LinkList.h` 和 `main.cpp` 文件中对单链表进行封装,我们实现了创建和销毁功能的优化,提高了单链表的使用效率。此外,文章还介绍了几种常见的优化技术,如缓存节点指针和批量处理,以进一步提升遍历性能。 ... [详细]
  • ButterKnife 是一款用于 Android 开发的注解库,主要用于简化视图和事件绑定。本文详细介绍了 ButterKnife 的基础用法,包括如何通过注解实现字段和方法的绑定,以及在实际项目中的应用示例。此外,文章还提到了截至 2016 年 4 月 29 日,ButterKnife 的最新版本为 8.0.1,为开发者提供了最新的功能和性能优化。 ... [详细]
  • iOS 设备唯一标识获取的高效解决方案与实践
    在iOS 7中,苹果公司再次禁止了对MAC地址的访问,使得开发者无法直接获取设备的物理地址。为了在开发过程中实现设备的唯一标识,苹果推荐使用Keychain服务来存储和管理唯一的标识符。此外,还可以结合其他技术手段,如UUID和广告标识符(IDFA),以确保设备的唯一性和安全性。这些方法不仅能够满足应用的需求,还能保护用户的隐私。 ... [详细]
  • 深入解析InnoDB中的多版本并发控制机制
    多版本并发控制(MVCC)是InnoDB存储引擎中的一项关键技术,通过维护数据在不同时间点的多个版本,确保了事务的隔离性和一致性。每个读取操作都能获得一个与事务启动时一致的数据视图,从而提高了并发性能并减少了锁竞争。此外,MVCC还支持多种隔离级别,如可重复读和读已提交,进一步增强了系统的灵活性和可靠性。 ... [详细]
  • 在Android 4.4系统中,通过使用 `Intent` 对象并设置动作 `ACTION_GET_CONTENT` 或 `ACTION_OPEN_DOCUMENT`,可以从相册中选择图片并获取其路径。具体实现时,需要为 `Intent` 添加相应的类别,并处理返回的 Uri 以提取图片的文件路径。此方法适用于需要从用户相册中选择图片的应用场景,能够确保兼容性和用户体验。 ... [详细]
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • 本文总结了JavaScript的核心知识点和实用技巧,涵盖了变量声明、DOM操作、事件处理等重要方面。例如,通过`event.srcElement`获取触发事件的元素,并使用`alert`显示其HTML结构;利用`innerText`和`innerHTML`属性分别设置和获取文本内容及HTML内容。此外,还介绍了如何在表单中动态生成和操作``元素,以便更好地处理用户输入。这些技巧对于提升前端开发效率和代码质量具有重要意义。 ... [详细]
  • 深入理解 Java 控制结构的全面指南 ... [详细]
  • 2012年9月12日优酷土豆校园招聘笔试题目解析与备考指南
    2012年9月12日,优酷土豆校园招聘笔试题目解析与备考指南。在选择题部分,有一道题目涉及中国人的血型分布情况,具体为A型30%、B型20%、O型40%、AB型10%。若需确保在随机选取的样本中,至少有一人为B型血的概率不低于90%,则需要选取的最少人数是多少?该问题不仅考察了概率统计的基本知识,还要求考生具备一定的逻辑推理能力。 ... [详细]
  • 如何使用mysql_nd:Python连接MySQL数据库的优雅指南
    无论是进行机器学习、Web开发还是爬虫项目,数据库操作都是必不可少的一环。本文将详细介绍如何使用Python通过 `mysql_nd` 库与 MySQL 数据库进行高效连接和数据交互。内容涵盖以下几个方面: ... [详细]
  • 寒假作业解析:第三周 2月12日 第7题
    尽快完成之前的练习任务!每日一练2.1 Problem A Laurenty and Shop 的题目要求是选择两条不同的路线以最小化总的等待时间。简要分析:通过对比不同路线的等待时间,可以找到最优解。此问题可以通过动态规划或贪心算法来解决,具体取决于路线的复杂性和约束条件。 ... [详细]
  • 解析 /etc/pki/tls/certs/cabundle.crt 文件的主要功能与应用场景 ... [详细]
author-avatar
梦回大唐2502907957
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有