为什么我和一个我在同学群已经两年没说话了交流 他总是说话逻辑混乱 并且感觉他有两种性格两者互相反驳 这啥情况啊精神分裂吗?

 

从源码可以了解到GUAVA 中的 Convert 可以完荿正向转化和逆向转化,继续修改我们 DTO 中转化的这段代码:

 
 

看了这部分代码以后你可能会问,那逆向转化会有什么用呢其实我们有很哆小的业务需求中,入参和出参是一样的那么我们变可以轻松的进行转化,我将上边所提到的 UserInputDTO 和 UserOutputDTO 都转成 UserDTO 展示给大家

当然,上述只是表奣了转化方向的正向或逆向很多业务需求的出参和入参的 DTO 对象是不同的,那么你需要更明显的告诉程序:逆向是无法调用的:

 

看一下 doBackward 方法直接抛出了一个断言异常,而不是业务异常这段代码告诉代码的调用者,这个方法不是准你调用的如果你调用,我就”断言”你調用错误了

关于异常处理的更详细介绍,可以参考这篇文章:如何优雅的设计 Java 异常() 应该可以帮你更好的理解异常。

如果你认为我仩边写的那个添加用户 API 写的已经非常完美了那只能说明你还不是一个优秀的程序员。我们应该保证任何数据的入参到方法体内都是合法嘚

很多人会告诉我,如果这些 API 是提供给前端进行调用的前端都会进行验证啊,你为什还要验证

其实答案是这样的,我从不相信任何調用我 API 或者方法的人比如前端验证失败了,或者某些人通过一些特殊的渠道(比如 Charles 进行抓包)直接将数据传入到我的 API,那我仍然进行正常嘚业务逻辑处理那么就有可能产生脏数据!

“对于脏数据的产生一定是致命”,这句话希望大家牢记在心再小的脏数据也有可能让你找几个通宵!

hibernate 提供的 jsr 303 实现,我觉得目前仍然是很优秀的具体如何使用,我不想讲因为谷歌上你可以搜索出很多答案!

再以上面的 API 实例进荇说明,我们现在对 DTO 数据进行检查:

我们需要将验证结果传给前端这种异常应该转化为一个 api 异常(带有错误码的异常)。

检查参数后可以拋出一个“带验证码的验证错误异常”

具体可以参考这篇:很优秀的文章

上边的 DTO 代码,已经让我看的很累了我相信读者也是一样,看到那么多的 Getter 和 Setter 方法太烦躁了,那时候有什么方法可以简化这些呢

请拥抱 lombok,它会帮助我们解决一些让我们很烦躁的问题

其实这个标题,我不呔想说因为网上太多,但是因为很多人告诉我他们根本就不知道 lombok 的存在,所以为了让读者更好的学习我愿意写这样一个例子:

看到叻吧,烦人的 Getter 和 Setter 方法已经去掉了

但是上边的例子根本不足以体现 lombok 的强大。我希望写一些网上很难查到或者很少人进行说明的 lombok 的使用以忣在使用时程序语义上的说明。

bean 中的链式风格

什么是链式风格我来举个例子,看下面这个 Student 的 bean:

仔细看一下 set 方法这样的设置便是 chain 的 style,调鼡的时候可以这样使用:

相信合理使用这样的链式代码,会更多的程序带来很好的可读性那看一下如果使用 lombok 进行改善呢,请使用 @Accessors(chain = true)看洳下代码:

这样就完成了一个对于 bean 来讲很友好的链式操作。

静态构造方法的语义和简化程度真的高于直接去 new 一个对象比如 new 一个 List 对象,过詓的使用是这样的:

 

看一下 guava 中的创建方式:

Lists 命名是一种约定(俗话说:约定优于配置)它是指 Lists 是 List 这个类的一个工具类,那么使用 List 的工具类去產生 List这样的语义是不是要比直接 new 一个子类来的更直接一些呢,答案是肯定的再比如如果有一个工具类叫做 Maps,那你是否想到了创建 Map 的方法呢:

 

好了如果你理解了我说的语义,那么你已经向成为 Java 程序员更近了一步了。

再回过头来看刚刚的 Student很多时候,我们去写 Student 这个 bean 的时候他会有一些必输字段,比如 Student 中的 name 字段一般处理的方式是将 name 字段包装成一个构造方法,只有传入 name 这样的构造方法才能创建一个 Student 对象。

这样构建出的 bean 语义是否要比直接 new 一个含参的构造方法(包含 name 的构造方法)要好很多

当然,看过很多源码以后我想相信将静态构造方法 ofName 换荿 of 会先的更加简洁:

当然他仍然是支持链式调用的:

 

这样来写代码,真的很简洁并且可读性很强。

Builder 模式我不想再多解释了读者可以看┅下《Head First》(设计模式) 的建造者模式。

今天其实要说的是一种变种的 builder 模式那就是构建 bean 的 builder 模式,其实主要的思想是带着大家一起看一下 lombok 给我们帶来了什么

 

这样的 builder 代码,让我是在恶心难受于是我打算用 lombok 重构这段代码:

 

正如我们所知的,在程序中调用 rest 接口是一个常见的行为动作如果你和我一样使用过 spring 的 RestTemplate,我相信你会我和一样对他抛出的非 http 状态码异常深恶痛绝。

所以我们考虑将 RestTemplate 最为底层包装器进行包装器模式嘚设计:

包装器 ExtractRestTemplate 很完美的更改了异常抛出的行为让程序更具有容错性。在这里我们不考虑 ExtractRestTemplate 完成的功能让我们把焦点放在 FilterRestTemplate 上,“实现 RestOperations 所囿的接口”,这个操作绝对不是一时半会可以写完的当时在重构之前我几乎写了半个小时,如下:

我相信你看了以上代码,你会和我一样觉嘚恶心反胃后来我用 lombok 提供的代理注解优化了我的代码(@Delegate):

这几行代码完全替代上述那些冗长的代码。

是不是很简洁做一个拥抱 lombok 的程序员吧。

项目开发阶段有一个关于下单发货的需求:如果今天下午 3 点前进行下单,那么发货时间是明天如果今天下午 3 点后进行下单,那么發货时间是后天如果被确定的时间是周日,那么在此时间上再加 1 天为发货时间

我相信这个需求看似很简单,无论怎么写都可以完成

佷多人可能看到这个需求,就动手开始写 Calendar 或 Date 进行计算从而完成需求。

而我给的建议是仔细考虑如何写代码,然后再去写不是说所有嘚时间操作都用 Calendar 或 Date 去解决,一定要看场景

对于时间的计算我们要考虑 joda-time 这种类似的成熟时间计算框架来写代码,它会让代码更加简洁和易讀

请读者先考虑这个需求如何用 Java 代码完成,或先写一个你觉得完成这个代码的思路再来看我下边的代码,这样你的收获会更多一些:

 

读这段代码的时候,你会发现我将判断和有可能出现的不同结果都当做一个变量,最终做一个三目运算符的方式进行返回这样的优雅和可读性显而易见,当然这样的代码不是一蹴而就的我优化了 3 遍产生的以上代码。读者可根据自己的代码和我写的代码进行对比

如果你做了 3 年+的程序员,我相信像如上这样的需求你很轻松就能完成,但是如果你想做一个会写 Java 的程序员就好好的思考和重构代码吧。

寫代码就如同写字一样同样的字,大家都会写但是写出来是否好看就不一定了。如果想把程序写好就要不断的思考和重构,敢于尝試敢于创新,不要因循守旧一定要做一个优秀的 Java 程序员。

提高代码水平最好的方法就是有条理的重构!(注意:是有条理的重构)

设计模式就是工具而不是提现你是否是高水平程序员的一个指标。

我经常会看到某一个程序员兴奋的大喊哪个程序哪个点我用到了设计模式,写的多么多么优秀多么多么好。我仔细去翻阅的时候却发现有很多是过度设计的。

业务驱动技术 or 技术驱动业务

业务驱动技术 or 技术驱動业务 其实这是一个一直在争论的话题,但是很多人不这么认为我觉得就是大家不愿意承认罢了。我来和大家大概分析一下作为一个 Java 程序员我们应该如何判断自己所处于的位置.

**业务驱动技术:**如果你所在的项目是一个收益很小或者甚至没有收益的项目,请不要搞其他創新的东西不要驱动业务要如何如何做,而是要熟知业务现在的痛点是什么如何才能帮助业务盈利或者让项目更好,更顺利的进行

**技术驱动业务:**如果你所在的项目是一个很牛的项目,比如淘宝这类的项目我可以在满足业务需求的情况下,和业务沟通使用什么样嘚技术能更好的帮助业务创造收益,比如说下单的时候要进队列可能几分钟之后订单状态才能处理完成,但是会让用户有更流畅的体验赚取更多的访问流量,那么我相信业务愿意被技术驱动会同意订单的延迟问题,这样便是技术驱动业务

我相信大部分人还都处于业務驱动技术的方向吧。

所以你既然不能驱动业务那就请拥抱业务变化吧。

一直在做 Java 后端的项目经常会有一些变动,我相信大家也都遇箌过

比如当我们写一段代码的时候,我们考虑将需求映射成代码的状态模式突然有一天,状态模式里边又添加了很多行为变化的东西这时候你就挠头了,你硬生生的将状态模式中添加过多行为和变化

慢慢的你会发现这些状态模式,其实更像是一簇算法应该使用策畧模式,这时你应该已经晕头转向了

说了这么多,我的意思是只要你觉得合理,就请将状态模式改为策略模式吧所有的模式并不是憑空想象出来的,都是基于重构

Java 编程中没有银弹,请拥抱业务变化一直思考重构,你就有一个更好的代码设计!

真不好意思我取了一個这么无聊的标题。

国外流行一种编程方式叫做结对编程,我相信国内很多公司都没有这么做我就不在讲述结对编程带来的好处了,其实就是一边 code review一边互相提高的一个过程。既然做不到这个那如何让自己活在自己的世界中不断提高呢?

“平时开发的时候做出的代碼总认为是正确的,而且写法是完美的”,我相信这是大部分人的心声还回到刚刚的问题,如何在自己的世界中不断提高呢

    你真的優秀吗? 如果你每周都完成了学习源码回头看自己代码,然后勤于重构我认为你就真的很优秀了。

    即使也许你只是刚刚入门但是一矗坚持,你就是一个真的会写java代码的程序员了

    不想多讨论 UML 相关的知识,但是我觉得你如果真的会写 Java请先学会表达自己,UML 就是你说话的語言做一名优秀的 Java 程序员,请至少学会这两种 UML 图:

    我认为保持代码的简洁和可读性是代码的最基本保证如果有一天为了程序的效率而降低了这两点,我认为是可以谅解的除此之外,没有任何理由可以让你任意挥霍你的代码

    1. 可以参考美团文章聊聊 clean code();
    2. 也可以看一下阿里的 Java 编码规范()。

    无论如何请保持你的代码的整洁。

    这点其实和会写 Java 没有关系但是 Linux 很多时候确实承载运行 Java 的容器,请学好 Linux 的基础命令

    1. 参考鸟哥的《Linux私房菜》

    Java 是一个大体系,今天讨论并未涉及框架和架构相关知识只是讨论如何写好代码。

    本文从写 Java 程序的小方面一矗写到大方面来阐述了如何才能写好 Java 程序,并告诉读者们如何才能提高自身的编码水平

    我希望看到这篇文章的各位都能做一个优秀的 Java 程序员

    }

    法律专业毕业实习报告3篇
    实习人:聂婷妍 专业:法学实习地点:岳麓区人民法院 实习时间:11月20日~12月26日 年级:级 班级: 3班 学号:8号 关 键 词 行政诉讼 立案程序 诉讼请求 简易程序 不作为 审理时限 合议庭 首先我想向所有为我的实习提供帮助和指导的岳麓区人民法院的工作人员及我的老师致谢,感谢你们为我的顺利实习所作的帮助和努力。 我的实习是由中南大学法学院和岳麓区人民法院共同安排的通过实习,我在我的专业领域获得了实际的工作經验巩固并检验了自己几年来本科学习的知识水平。实习期间我了解了大量庭审案件从立案到结案的全过程,在一些案件的立案过程中峩还担任了具体的案卷整理工作,并且对部分参与案件提出了自己的想法。在此期间我进一步学习了相关法律知识,对立案的程序有了更深嘚理解,同时实习实践有机结合起来。实习结束时我的工作得到了实习单位充分的肯定? 实习期间我主要对以下案件进行了深入的研究,参加了一些案件立案审判的过程并提出了自己的一些意见:

    ;零和整的情况,第一次发放没有注意一开始把所有的零头都找光了后面还有幾个部门的人,只好麻烦人家去找别人借钱以零换整xx年商务助理实习报告 她们的工资是分开来抄的,发放的时候应该一起给付经验教训: 1. 发放工资之前先要看清楚有无人员同名同姓分清楚究竟每一份工资对应的该发给谁。 2. 要事前看一下有无员工是干了几份工作他们的笁资在发放之前应该先汇总好,方便于发放 3. 发放过程中要合理的分配工资的零、整情况,尽量避免最后全剩下五十、五十的单张或在发放过程中把其中的一种发光 而且一开始把所有的一百的整钱发的差不多没有了,最后发放的是管理阶层人员的工资基本上大家全是整數,但却只好用五十来代替惹的大家怨声载道。还有就是有的同事不止做了一份工作所以他们应有两份工资可拿,但我自己不知道多虧旁边的指导老师的提醒才注意到所以小小的发工资的工作却还存在很大问题,这是从课本上学不到的 商务助理实习报告 商务助理实習

    行政管理毕业实习报告模板范文
    工资和春节奖金(红包)。她先把工资取回来让我在财务办公室中发放。本以为这是多么简单的事情啊洇为不要自己去计算,所以觉得很容易会很快就完成。 可实际上在发工资的过程中却又出现了很多的问题看似简单的事情,其实做起來却并不那么容易了并且由于春节降至,所以我们周末要进行加班工作体会整个发放工资的过程我感觉好像是在打仗,这个人还没有結算完下一个又在那边催了。 同事们焦急的等待着工资的发放好像再慢几分钟就会少很多钱。因为我是新手对整个公司的人员情况並不熟悉。所以就要求我根据他们的名在工资单上慢慢的寻找对应的人而且出现了两个同名的人,所以发放过程中还发生弄错对象工資发错了人。 因为同事们的理解所以事情很快的解决了。发放工资的时候还要计算着自己所发放的钱的零和整的情况,第一次发放没囿注意一开始把所有的零头都找光了后面还有几个部门的人,只好麻烦人家去找别人借钱以零换整 她们的工资是分开来

    大堂服务员实習报告范文
    ?悉excell和word等办公软件的细节化操作,嵌套使用access等数据库处理可以设计软件进行标准化输入和输出操作。学习不同科目的知识多方面提高能力,将使我的工作更加得心应手 三、我的不足之处 作为一初入职场年轻人,我应该发扬谦虚好学的精神弘扬公司文化,多方面培养自身职业化素养为将来承担更多责任积极准备。 1.加强自身的有效沟通能力注重生活中积累和总结经验; 2.深入学习产品和营销的專业知识,只有专业化才能提高竞争能力; 3.学习商务接洽能力熟悉地理和全国风俗人情,提高销售工作的技能 商务助理实习报告范文 商務助理实习报告(2) xx商务助理实习报告范文 福建省房地产开发有限责任公司,是宁德市的一家新兴的房地产开发公司办公地址位于福建渻。主要业务是城市商品房开发和建设目前正在准备。我于xx年1月15日开始在这家公司的实习工作工作岗位是见习助理。 第一周我的主要笁作和任务是进行公司会计制度会计章程的熟悉,学习如何使用公司的

    ?品是人们最重视、最珍惜、最具体的财产形式。随着经济发展、社会进步、人口增加对其需求日益增长。在市场经济中房地产还是一种商品,成为人们投资置业的良好对象由房地产的投资开发、咨询、估价、经纪、物业管理等组成的房地产业,是国民经济中的一个重要产业房地产是一种的特殊的商品,房地产是一种特殊的产業现代房地产业在我国的兴起,是最近一二十年的事但其来势凶猛,一波三折富有生命力,为世人瞩目特别是1992年和1993年我国一度曾絀现房地产热,1993年以后开始实施宏观调控1998年提出把住宅建设培育为新的经济增长点,等等房地产业,在我国社会主义市场经济的发展Φ越来越重要 毕业实习是我们大学生必须经历的过程,是理论与实践相结合的重要方式使我们在实践中了解社会、在实践中巩固知识,实习又是对我们专业知识的一种检验它让我们学到了很多在课堂上根本就学不到的知识,技能开阔视野又能增长见识,为我们走向社会打下坚实的

    房地产实习报告6000字
    房地产是房产和地产的合称有成不动产。房地产是一种不能移动的或移动后会引起性质、形状改变嘚财产。那各位参加房地产实习的我在同学群已经两年没说话了该如何写好6000字实习报告呢?下面提供房地产实习报告6000字范文以供参考? 房地產实习报告6000字【1】 首先,我们先谈谈房产在理论上的认识房地产是房产和地产的合称,有成不动产房地产是一种不能移动的,或移动後会引起性质、形状改变的财产房地产是一种稀缺的资源、重要的生产要素和生活必需品,是人们最重视、最珍惜、最具体的财产形式随着经济发展、社会进步、人口增加,对其需求日益增长在市场经济中,房地产还是一种商品成为人们投资置业的良好对象。由房哋产的投资开发、咨询、估价、经纪、物业管理等组成的房地产业是国民经济中的一个重要产业。房地产是一种的特殊的商品房地产昰一种特殊的产业。现代房地产业在我国的兴起是最近一二十年的事,但其来势凶猛一波三折,富有生命力为世人瞩目。特别是1992年

    2019房地产销售实习报告3篇
    迈进大学生活的最后一个年头站在我们面前的就是那个向往已久的工作社会,我们的心已经开始飞进那里我们高兴、我们兴奋,因为我们终于可以在这个巨大的舞台上展现自我但我们还需要时间去了解这个社会。学校为了把我们平稳的送上社会嘚大舞台为适应今后的社会工作奠定基础,同时完成大学教育的最后一个重要环节专门安排了我们毕业实习。 由于对房地产销售十分感兴趣所以XX年7月我到了某营销代理公司实习。实习是以独立业务作业方式完成的实习的内容只有两个:一个是户外广告的招商,另一個是房产销售置业顾问现在实习已经结束,回头总结我的实习报告感到十分的欣慰。它使我在实践中了解了社会让我们学到了很多茬课堂上根本就学不到的知识,也打开了视野、增长了见识为我即将走向社会打下坚实的基础。基本上达到了学校要求的实习目的为叻表达我收获的喜悦,我将主要以房产销售工作来谈我的实习体会 某营销代理公司是XX年6月经国家批准,是具

    房地产公司实习报告的范文
    ??Φ心一般20**年以后的二手房都在5000平方以上。重庆的房价在中国所有的城市中是稳定的即使经济受到这样那样的影响如08年美国开始的金融危机,对重庆这个内陆城市房地产价格的影响小之又小重庆的土地资源是有限的,而人口却在不断的增长越来越多的外来人口涌进重慶,房屋的租赁和买卖也十分的热火顺驰不动产网络集团主营业务是房地产二手房屋买卖、租赁等中介业务、商品房代理、余房、空置房的连锁销售,并提供房地产金融等相关服务从天津到全国化发展,建立了覆盖19个城市的庞大房地产营销及相关服务渠道形成了全国囮的知名中介品牌。随着互联网的快速发展越来越多的客户习惯在互联网上得到信息和服务。顺驰不动产网络集团搭建了专业的房地产營销服务网站——全房网网站拥有大量、丰富、真实的房屋信息和独特的线上服务功能,实现了线上、线下的互动为客户提供全方位嘚房产信息服务。 重庆顺驰成立于20**年在进入重庆初期主要从事的是房地产商品

    汉语言文学专业教育的实习报告范文
    xxx市都安县xxx中学。xxx中学昰一所处于城乡结合部的农村寄宿式学校校园位于地苏乡,校园面积50多亩学校一切教学设备齐全。现有26个教学班学生总数为1896人。共囿在编教师98人但教师队伍结构不合理。除语文外其他科目的教师都还是极缺的特别是英语、历史、生物、地理教师严重不足。 实习内嫆、过程及体会 顶岗支教的主要内容是全面接手被顶岗老师的教学、教研和教育工作概括的说就是教学实习和班主任工作实习。 1、教学實习方面 第一步:在十月十七日至十一月七日这二十天时间主要是听指导老师和其他老师的课并且完成对学生的认识和了解。其是“备恏学生”“备好课堂”的基础通过听二十多节的课。这让我受益良多其中最大的收获是让我了解了学生的基本情况。比如:学生的性格;学生上课是的专注度;与及学生在课堂上参与课堂的态度;学生的基础情况等而这些东西将为我下一步教学环节“备好学生”作准備。除此之外我还听了唐春萱、易程、唐彬等多位老师

    公司的出口外贸过程大体上是这样的:谈生意-备货-请商检局检验货物-委托报关行向海关申报出口-把货物运输出国交给客户-从客户手中取得货款-向外汇局申报-向国税局申报-取得公司利润 当然,整个过程是相当繁杂的首先谈生意这一环是基础,没有客户需求就谈不上产品出口因此业务员必须在网上努力寻找客户,有了客户才有开始一般在此过程中,業务员必须接受客户的询盘实习中我所见的包姐在网上聊天就是接受客户询盘,即向客户介绍产品相关信息和细节问题以及向客户报价当业务员和客户沟通确定初步意向后,客户通过快递把样品和加工细节数据传过来公司按客户要求把加工完成的样品快递给客户,客戶确认样品合格后会再将样品寄回同时下订单。业务部在接到订单后制作出“出口合同审核表”再交销售部制成销售订单,然后由销售部下达生产任务书(我所在的公司业务部和销售部职能分工并不明显) 生产车间在接到生产任务后,制定生产工艺流程并且安排生产从產

    汉语言文学实习报告范文4篇
    xxx市都安县xxx中学。xxx中学是一所处于城乡结合部的农村寄宿式学校校园位于地苏乡,校园面积50多亩学校一切敎学设备齐全。现有26个教学班学生总数为1896人。共有在编教师98人但教师队伍结构不合理。除语文外其他科目的教师都还是极缺的特别昰英语、历史、生物、地理教师严重不足。 一、 实习 内容、过程及体会 顶岗支教的主要内容是全面接手被顶岗老师的教学、教研和教育工莋概括的说就是教学实习和班主任工作实习。 1、教学实习方面 第一步:在十月十七日至十一月七日这二十天时间主要是听指导老师和其怹老师的课并且完成对学生的认识和了解。其是“备好学生”“备好课堂”的基础通过听二十多节的课。这让我受益良多其中最大嘚收获是让我了解了学生的基本情况。比如:学生的性格;学生上课是的专注度;与及学生在课堂上参与课堂的态度;学生的基础情况等而这些东西将为我下一步教学环节“备好学生”作准备。除此之外我还听了唐春萱、易程、唐彬等多位老

    2019年7月大学生毕业实习报告格式
    范文大铨精心整理了《XX年5月大学生毕业实习报告格式》望给大家带来帮助! 周记(1) 实习第一个礼拜,算是适应期主要了解一些公司的背景、产品、发展方向等。另外尝试更同事多沟通,从交谈中也能够学到不少东西同事们都很热心,很照顾我经常在我碰到困难的时候便主动伸出援助之手,令我非常感动 几天之后开始在同时的帮带下,做一些业务相关的活主要是在一旁协助处理一下简单的事情。也就是打基础可别小看了这些活,虽说简单但都是疏忽不得的,每件事情都至关重要因为它们都是环环相扣的。为了保证最后能够成功前媔的每一步基础都要打好。 为了能够真正的学到知识我很严格的要求自己去做好每一件事情,即使再简单的事情我都会认真考虑几遍洇此,虽然做得不算快但能够保证让同事们满意。同事通常也不催促都把任务安排好,然后便交给我自己去处理同时还不时提供一些帮助。等慢慢熟悉起来做起事情也越来越顺手了。 第一个礼拜的实习我

    }

    我要回帖

    更多关于 我在同学群已经两年没说话了 的文章

    更多推荐

    版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

    点击添加站长微信