关于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 ...
随机推荐
- JSP自定义标签的使用简化版
在jsp中 如果不想页面中出现java代码 这个时候就需要使用到jsp的自定义标签库技术了 自定义标签库 能够有效的减少jsp中java代码的出现 使其更加自然的像html页面一样 如果要使用jsp自 ...
- 什么是VR中的vection?
Vection是VR领域的一个专有名词,其义指“在虚拟现实中给人带来‘移动’(self-motion)感觉的认知因素”1.也就是说,vection就是指那些给玩家带来“我正在这个虚拟环境中移动”这种感 ...
- vue 单页应用点击某个链接,跳转到新页面的方式
<router-link class="goDetail" :to="{name: 'detail',params: {id:item.id}}" tar ...
- java架构之路-(JVM优化与原理)JVM类的加载机制
话不多说,先上图. ***.class文件执行大概就是这样来走的.我们都知道我们的java文件经过编译以后会生成对应的class文件.先经过类装载子系统,然后塞进运行时内存模型的元空间,开始执行方法, ...
- 针对永久不过期的key 批量设置过期时间
问题需求: redis内存暴增,后来发现有很多设置永久不过期. 解决:查找出来之后针对前缀批量设置过期时间 (过期时间与开发沟通 保证服务不受影响) 来源于网上杨一的代码 正好解决了我遇到的问题 在这 ...
- 夯实Java基础系列21:Java8新特性终极指南
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...
- 基于SpringBoot+WebSocket搭建一个简单的多人聊天系统
前言 今天闲来无事,就来了解一下WebSocket协议.来简单了解一下吧. WebSocket是什么 首先了解一下WebSocket是什么?WebSocket是一种在单个TCP连接上进行全双工 ...
- android 6.0导航栏 NavigationBar影响视图解决办法
在开发app的时候会遇到有些测试手机没有物理按钮,比如最近在做的一个app在小米手机上运行显示效果很好,但是在华为P7手机上显示就乱了,底部的NavigationBar直接覆盖在主视图上,导致按钮无法 ...
- Tomcat源码分析二:先看看Tomcat的整体架构
Tomcat源码分析二:先看看Tomcat的整体架构 Tomcat架构图 我们先来看一张比较经典的Tomcat架构图: 从这张图中,我们可以看出Tomcat中含有Server.Service.Conn ...
- SpringBoot第二十五篇:SpringBoot与AOP
作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/11457867.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言 作者在实际 ...