关于Java 项目的思考总结
Java 项目思考总结
前言
今天是2017年3月25日,笔者已经毕业半年,工作经验一年。
正好有心思写这个总结。
持续开发
对于Java项目,我所接触的一般就是JavaWeb项目和 Java Jar后台进程项目。
一个项目要想健康持续开发和维护,那么就要尽早设计好,编码按照规范,切忌不要偷懒图便利,先完成功能再后续优化这种思想要尽量避免。
当你做这个项目完成的时候,会切换到别的项目开发,当这个项目有新的开发需求的时候,再回头看自己的代码,可能有两种感受:
1.
我擦,这个居然是我写的代码,这么烂,这咋改,不敢动啊。
2.
我擦,这个居然是我写的代码,居然这么清爽,不忍心写乱了。
所以,为了以后的持续开发和维护一开始就认真写好,即便是要交给下一个人,代码质量还不会腐坏。
以后等于永不
Later is never.
软件开发有这么一句话,留着以后做,等于永远不会做。所以要做就趁早。要做就给后面做好铺垫。
编码
模型Model
对于Java使用的比较多的是Spring框架,配合Mybatis。我见过一些代码,为了简便,直接使用List<HashMap< String, Object>>
作为Mapper接口的返回。
这样写是毫无问题的,刚毕业的时候看到项目(十年前的代码都有的那种)里面都是这样写。
但是这种写法尽可能要避免。
MVC中的Model干嘛用的,就是对数据建模用的,现在有Mybatis生成器,直接生成Model,用getXXX()的方式取值,比用 Integer.parseInt(result.get("Str"))类似这种优雅多了,还会转来转去,为何不直接在MapperXML里面手写一个ResultMap直接映射到你的Model里面呢?取值的时候要写Key的名字,写错或者为Null,类型转换来转换去,多累。
上下文Context
对于业务总有一个粒度,或者说某种维度。比如以城市为维度。那么在业务代码里面,要经常使用要这个维度变量。然后几乎每个方法里面都会待着这个变量,(...Integer cityId)。这种变量少还行,但是加上方法本身的变量列表,就超过3,4个了。。有点长,不优雅。
为何不定义一个Context。这个可以是个简单的POJO,把你常用的变量放在里面,在业务起始的地方初始化,然后进入各种流程,都可以使用这里的变量,全局共享。没什么安全性需要考虑的,自己的代码自己负责。
我一般定义一个BusinessEnv的类,存放当前的业务环境数据。比如cityId,cityName,No,Number一类的东西。比放在Map里面优雅。
这样写还有一个好处,就是改动比较集中,可以放心设置,不会有某些地方写死了,不容易传错变量。
编码风格Style
笔者回顾之前写的代码,就像写流水账一样,像瀑布流,一个方法几百行,想到哪里处理到哪里。看了一本书,之后惊叹编码风格的重要性。
写代码就像写文章那样,一个一个的自然段那样,行文流畅,结构清晰,那才是好代码。自己改也方便,也方便交给别人,很灵活,可插拔。
编码的过程中,不是一次就能写出这样完美的代码,那么在推进的过程中,你可以慢慢优化,慢慢就成型了。界限,梗概,脉络都会清晰起来。
这时候,可以做一步小重构了,把代码重排一下,就像写文章的排版一样。
如下图所示:这是一个主程序,优化之后的代码,不敢说这个多好,但是结构还是比较清晰的。先拿到维度的配置,然后构建Context,然后初始化一些东西,然后prepare some data,接下来sendGoods,最后更新什么东西,然后backScan干点事情,最后clear Context内容,清除数据,释放内存,以帮助GC回收垃圾。
一开始是一大片很长的,此项目虽小,写一个文件里是可以的。但是一个方法巨长。然后就是每一个步骤的业务,像是Pipeline一样,也可以说是单一责任,一个业务模块处理一件事情。每个模块又可以拆分更细的模块,由浅入深,保证每一块都是先梗概,后细节。
像这样,这个方法里,一行处理一个事情。
待续….
关于Java 项目的思考总结的更多相关文章
- 使用Scala实现Java项目的单词计数:串行及Actor版本
其实我想找一门“具有Python的简洁写法和融合Java平台的优势, 同时又足够有挑战性和灵活性”的编程语言. Scala 就是一个不错的选择. Scala 有很多语言特性, 建议先掌握基础常用的: ...
- Java项目经验
Java项目经验 转自CSDN. Java就是用来做项目的!Java的主要应用领域就是企业级的项目开发!要想从事企业级的项目开发,你必须掌握如下要点:1.掌握项目开发的基本步骤2.具备极强的面向对象的 ...
- java项目部署总结
环境问题一定要搞定,今天下午因为我本机的mysql版本较高,部署一个java项目,mysql jar驱动包8.0的版本无法使用,浪费了好长时间找问题. 总结:遇到问题多方位思考,尽快解决掉,提高工作效 ...
- 立足GitHub学编程:13个不容错过的Java项目
立足GitHub学编程:13个不容错过的Java项目 今天我们将整理一大波干货满满的Java示例代码与能力展示素材. GitHub可谓一座程序开发的大宝库,有些素材值得fork,有些则能帮助我们改进自 ...
- 353 stars Java项目!Java小白必看!austin介绍 【第一话】
有好几个群友问我为什么最近更新变慢了.工作忙是一方面,另一方面是我更新文章的动力确实下降了.近大半年一直在更新的<对线面试官>系列,到现在已经40篇了. 说实话,当时我更新该系列有很大一部 ...
- prometheus监控java项目(jvm等):k8s外、k8s内
前言 虽然可以使用jvisualvm之类的工具监控java项目,但是集群环境下,还是捉襟见肘,下面介绍如何用主流的prometheus来监控java项目. java项目配置 在pom.xml中添加依赖 ...
- eclipse — 导入android项目后识别成java项目的问题及解决
最近在eclipse导入android项目的时候遇到了奇葩问题,再此记录 遇到的问题就是:将完好的android项目导入到eclipse的时候,原本这是一个很容易的事情,但是导入成功后发现,,,靠ec ...
- owner:轻松管理java项目配置
前段时间,一同事说在 github 上“活捉了”一个很有趣的开源项目,它是一个超轻量级的 jar 包,能够帮助你在 java 项目中摒弃样板式的 properties 配置代码,让你轻松自如地管理和使 ...
- Scala:Java 项目中混入scala代码
Spark 是用Scala代码写的.为了调试Spark,做了如下尝试. 1.Eclipse下:Java 项目 ,Using Maven,编写了一个java 版Spark应用. Spark的代码(sca ...
随机推荐
- 数据结构之二叉树篇卷一 -- 建立二叉树(With Java)
一.定义二叉树节点类 package tree; public class Node<E> { public E data; public Node<E> lnode; pub ...
- adb之wm学习笔记
为什么学习adb的wm指定 自动化测试平台获取手机的屏幕分辨率 adb -s iphoneCode shell wm usage: wm [subcommand] [options] wm size ...
- Spring MVC-从零开始-文件上传(未完待续)
Spring MVC-从零开始-文件上传(未完待续)
- python自动化测试三部曲之untitest框架
终于等到十一,有时间写博客了,准备利用十一这几天的假期把这个系列的博客写完 该系列文章本人准备写三篇博客 第一篇:介绍python自动化测试框架unittest 第二篇:介绍django框架+requ ...
- .NetCore技术研究-.NET Core迁移前的准备工作
前段时间迁移.NET Core做了大量的试水和评估,今天整理一下分享给大家.大致有以下几个部分: 1. .NET Core的由来 2. 为什么要迁移.NET Core 3. .NET Core3.X主 ...
- Jedis 常用API使用
使用Jedis操作Redis常用的API <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> <depen ...
- ibatis 学习
1.$与#的区别: 用到#和$来获取传的参数值,其中#是将传来的值替换(如果是字符串,会将‘’带着替换,比如上面$value$,用#value#的话,就会出错.#与$的使用区别:$中间的变量就是直接替 ...
- 在创建activiti5..22所需的25张表时 ,所用的方法和遇到的问题。
最近在学习关于activiti流程设计的相关内容,首先第一步就需要了解25张activiti相关的表,具体的每张表的含义 请自行百度. 这里讲一下 用java代码生成所需要的25张表,很简单: pub ...
- 3DEarth PPT :一款专为GIS系统研发的三维汇报演示系统
3DEarth PPT(三维地球汇报演示系统)又称 3DGis PPT,是专为GIS系统研发的三维汇报演示系统.对有3DGis系统的客户它可以作为一个组件(dll)嵌入原系统,对没有3DGis系统的客 ...
- vue- Vue-Cli脚手架工具安装 -创建项目-页面开发流程-组件生命周期- -03
目录 Vue-Cli 项目环境搭建 与 python 基础环境对比 环境搭建 创建启动 vue 项目 命令创建项目(步骤小多) 启动 vue 项目(命令行方式) 启动 vue 项目(pycharm 方 ...