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 项目的思考总结的更多相关文章

  1. 使用Scala实现Java项目的单词计数:串行及Actor版本

    其实我想找一门“具有Python的简洁写法和融合Java平台的优势, 同时又足够有挑战性和灵活性”的编程语言. Scala 就是一个不错的选择. Scala 有很多语言特性, 建议先掌握基础常用的: ...

  2. Java项目经验

    Java项目经验 转自CSDN. Java就是用来做项目的!Java的主要应用领域就是企业级的项目开发!要想从事企业级的项目开发,你必须掌握如下要点:1.掌握项目开发的基本步骤2.具备极强的面向对象的 ...

  3. java项目部署总结

    环境问题一定要搞定,今天下午因为我本机的mysql版本较高,部署一个java项目,mysql jar驱动包8.0的版本无法使用,浪费了好长时间找问题. 总结:遇到问题多方位思考,尽快解决掉,提高工作效 ...

  4. 立足GitHub学编程:13个不容错过的Java项目

    立足GitHub学编程:13个不容错过的Java项目 今天我们将整理一大波干货满满的Java示例代码与能力展示素材. GitHub可谓一座程序开发的大宝库,有些素材值得fork,有些则能帮助我们改进自 ...

  5. 353 stars Java项目!Java小白必看!austin介绍 【第一话】

    有好几个群友问我为什么最近更新变慢了.工作忙是一方面,另一方面是我更新文章的动力确实下降了.近大半年一直在更新的<对线面试官>系列,到现在已经40篇了. 说实话,当时我更新该系列有很大一部 ...

  6. prometheus监控java项目(jvm等):k8s外、k8s内

    前言 虽然可以使用jvisualvm之类的工具监控java项目,但是集群环境下,还是捉襟见肘,下面介绍如何用主流的prometheus来监控java项目. java项目配置 在pom.xml中添加依赖 ...

  7. eclipse — 导入android项目后识别成java项目的问题及解决

    最近在eclipse导入android项目的时候遇到了奇葩问题,再此记录 遇到的问题就是:将完好的android项目导入到eclipse的时候,原本这是一个很容易的事情,但是导入成功后发现,,,靠ec ...

  8. owner:轻松管理java项目配置

    前段时间,一同事说在 github 上“活捉了”一个很有趣的开源项目,它是一个超轻量级的 jar 包,能够帮助你在 java 项目中摒弃样板式的 properties 配置代码,让你轻松自如地管理和使 ...

  9. Scala:Java 项目中混入scala代码

    Spark 是用Scala代码写的.为了调试Spark,做了如下尝试. 1.Eclipse下:Java 项目 ,Using Maven,编写了一个java 版Spark应用. Spark的代码(sca ...

随机推荐

  1. 200行代码实现Mini ASP.NET Core

    前言 在学习ASP.NET Core源码过程中,偶然看见蒋金楠老师的ASP.NET Core框架揭秘,不到200行代码实现了ASP.NET Core Mini框架,针对框架本质进行了讲解,受益匪浅,本 ...

  2. win10下安装npm&cnpm步骤

    1.node官网下载安装包 2.分别输入node -v,npm -v检查是否完成 3.配置npm的全局模块的存放路径以及cache的路径,新建node_global和node_cache文件,以下是我 ...

  3. JavaScript总结(一)

    一.JavaScript 简介 1.1 .什么是 JavaScript? JavaScript 的简称:JS. JavaScript 是一个脚本.(不需要经过编译器编译的语言就叫做脚本) JavaSc ...

  4. 一个低级错误引发Netty编码解码中文异常

    前言 最近在调研Netty的使用,在编写编码解码模块的时候遇到了一个中文字符串编码和解码异常的情况,后来发现是笔者犯了个低级错误.这里做一个小小的回顾. 错误重现 在设计Netty的自定义协议的时候, ...

  5. springboot 集成swagger2

    使用Swagger 可以动态生成Api接口文档,在项目开发过程中可以帮助前端开发同事减少和后端同事的沟通成本,而是直接参照生成的API接口文档进行开发,提高了开发效率.这里以springboot(版本 ...

  6. nginx 配置语法

    一.语法规则: location [=|~|~*|^~] /uri/ { … } = 开头表示精确匹配 ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可.nginx不对url做编码 ...

  7. linux常用开发命令总结

    linux常用命令 文件操作命令 1. cd 目录名/目录名  切换目录 cd .. 切换到上一级目录  (change dictionary) Ctrl+C强制退出命令行,回到上一级 2.ls    ...

  8. 【SQL server初级】数据库性能优化一:数据库自身优化(大数据量)

    数据库优化包含以下三部分,数据库自身的优化,数据库表优化,程序操作优化.此文为第一部分 数据库性能优化一:数据库自身优化 优化①:增加次数据文件,设置文件自动增长(粗略数据分区) 1.1:增加次数据文 ...

  9. Postgressql高可用(pgpool+异步流复制)

    文档结构: 由于博主之前是Oracle dba,oracle 高可用一般是rac,以及搭建ADG,一个是基于实例的高可用,一个是基于数据的容灾,甚至也有rac+adg的方式.Postgres有同步和异 ...

  10. Linux下几种常见压缩方式测试对比

    目录 Linux下几种常见压缩方式测试对比 参考 简介 测试 总结 Linux下几种常见压缩方式测试对比