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. 夯实Java基础系列4:一文了解final关键字的特性、使用方法,以及实现原理

    目录 final使用 final变量 final修饰基本数据类型变量和引用 final类 final关键字的知识点 final关键字的最佳实践 final的用法 关于空白final final内存分配 ...

  2. APP自动化测试的环境配置

    什么是Appium? 第三方自动化框架(工具),扩充了selenium webdriver 协议,在原有的基础上添加了移动端测试API selenium webdriver 指定了客户端到服务端的协议 ...

  3. 11 种在大多数教程中找不到的JavaScript技巧

    当我开始学习JavaScript时,我把我在别人的代码.code challenge网站以及我使用的教程之外的任何地方发现的每一个节省时间的技巧都列了一个清单. 在这篇文章中,我将分享11条我认为特别 ...

  4. Web前端开发的应用和前景——web 1.0到web 3.0

    Web前端开发的应用和前景--web 1.0到web 3.0 Web1.0:(只读时代) 以静态.单向阅读为主,网站内信息可以直接和其他网站信息进行交互,能通过第三方信息平台同时对多家网站信息进行整合 ...

  5. 第一篇:php开发环境

    Window: 1.XAMPPhttps://www.apachefriends.org/index.html 2.WampServerhttp://www.wampserver.com/ Linux ...

  6. 30 分钟快速入门 Docker 教程

    原文地址:梁桂钊的博客 博客地址:http://blog.720ui.com 欢迎关注公众号:「服务端思维」.一群同频者,一起成长,一起精进,打破认知的局限性. 一.欢迎来到 Docker 世界 1. ...

  7. Java 爬虫遇到需要登录的网站,该怎么办?

    这是 Java 网络爬虫系列博文的第二篇,在上一篇 Java 网络爬虫,就是这么的简单 中,我们简单的学习了一下如何利用 Java 进行网络爬虫.在这一篇中我们将简单的聊一聊在网络爬虫时,遇到需要登录 ...

  8. RocketMQ 源码学习笔记————Producer 是怎么将消息发送至 Broker 的?

    目录 RocketMQ 源码学习笔记----Producer 是怎么将消息发送至 Broker 的? 前言 项目结构 rocketmq-client 模块 DefaultMQProducerTest ...

  9. F#周报2019年第41期

    新闻 .NET架构指南 美妙的WebSharper:学术刊物 .NET Core 3.0中Blazor Server的方案与性能 Mono 6.4.0发布说明 CapitolFSharp召集发言人 视 ...

  10. angular4 httpclient拦截器

    1.创建服务: InterceptorService.ts import { Injectable } from '@angular/core'; import { HttpEvent,HttpInt ...