代码最佳实践

1:对于不可以为空的对象,尽早返回,且打出错误日志.

a:直观,易读,容易查找错误

b:不会往下执行 能节约很多时间性能上的消耗

c:不会引起一些未知性异常

2:对于接口返回 ,还是需要返回原生对象,而不是跟某个协议耦合.

a:按照之前的逻辑使用PB返回,那么dubbo使用不了,其他的框架也是使用不了的

b:如果把PB传到service里面,就会引起了很多跟业务逻辑不相关的一些代码,比如PB的封装.就会造成很混乱

c:好处就是PB比较轻,但是因为 我们的service和web几乎都是局域网 ,所以不用考虑 加密  和体积大小问题 ,所以不管怎么样  还是传输java原生对象比较好

3: 对于接口返回CommonResponse,我个人觉得 也还是没有必要

a:一旦service返回这个CommonResponse,那么到了controller又要取出来做一些别的显示转换功能,这个类似java的封箱和拆箱了

b:对于调用方来说,  根本不能直观的获得 CommonResponse里面的对象到底是什么,如果嵌套很深的话,更加难找,再如果使用了反射的话,那就更加不知道了

4: 对于接口返回HashMap,我个人认为弊端比较多

a:hashMap返回的值,没人能清楚地知道 有多少,他们都是什么意思

b:一旦我们去获取的时候就会存在 ,写错key?

c: 查找出来为空的判断 各自强制类型转换 ?

d:

5: 对于接口返回List<Object>或者Object,也是有很多弊端的

a:对于接口返回这样的类型,那么调用方  看到这个方法应该怎么办,怎么用?

b:这样的接口类型 ,最好还是应该使用泛型 ,对于自己写代码的时候也会尽快发现错误.

6:对于接口的返回处理,如果执行成功了,就直接默认成功,不处理, 如果失败了就会有异常机制往外抛出去

a:之前看到很多接口 ,在每个if else 里面,如果成功就返回 CommonResponse  Success,其实这个是没有必要的,比如一百个if else 就写了一百遍 ,默认成功之后 统一处理

b:而且失败了 最好不要返回错误 ,直接抛出业务异常 ,不然 根本无法定位错误

7:对于异常的处理

a:一些不重要的,比如订单流程 发邮件失败  可以catch住 ,因为这个不能影响主流程

b:但是对于主流程的异常还是需要一步步往外面抛出去,之前看到很多异常被catch,住了   但是又没有往外面抛

c:所以现在对于异常得处理,如果是业务异常或者不是必须catch住的就直接抛出去, 如果是那些读文件的。就可以先catch住,然后关闭流,再抛出去

d:这样的异常最后都会到一个统一的出口 。做同一转换

8:对于多个地方出现的一样的字符串,最好还是同意使用常量来管理

9:对于接口的定义,能一个方法搞定的最好 一个方法搞定  直接传输对象进去

a:比如一个修改订单的状态,价格,时间等等的方法 就在Service写了3个. 其实这个应该在controller来控制,不然方法也是会指数级别增长

b:

10:对于业务逻辑复杂的方法,应该尽量抽出小方法,减少if else , 比如之前订单的一个方法  300 多行 if  else 里面夹带了发短信  发邮件  发微信模板

11: 对于if  else 比较多的业务  不仅仅要独立小方法  而且要减少if else   比如 订单的各种状态  发不同的消息   我们 可以把他放到统一hashMap 里面

根据不同状态获取不同信息   且时间复杂度为1

12:有些业务逻辑删除关联关系有外键关联,导致删除不掉.应该抛出业务异常

13::还是要把核心service写成一个独立的方法,不然app和web很难维护

14:pb的转换写成功一个单独的pbConvert. 写成模板模式比较好理解,而且不容易出错,能复用

15:工具类最好先统一,多用工具类好维护,bug少

16 最好传值得时候使用封装类型,这样就不会有默认值,如果是空,就是没有传。所以在接受前端参数的时候,最好用封装类型,

而在比较大小,或者存redis的key 的时候必须用原始类型 否则 会获得错误的结果   因为封装类型值相等 但是对象不等

17:最好每个方法还是需要写一下junit单元测试,这样会减少bug和以后容易找问题

18;注意一些性能的小优化,今天一个改变订单状态的接口超时了,想想应该把发邮件和发短信等等的写成异步发送

19:代码里面尽量减少循环,特别是双重循环(现在还有很多3重循环),可以把他放到hashmap里面。

20:logback看看怎么优化比较好  按照每天的日志文件  每天又分为info  sql error等等

21:在每个比较关键的代码的执行点,最好都带一个log,这样能更好的查找问题

22:对于check的方法,比如checktoken  最好是只返回true false。如果类型比较多,就返回枚举类型。或者采用异常机制(各种 返回 1  2  3  4 5 6 简直看不懂)

23:是否有必要分 bo vo po,dto等等类型转换

vo :这个是web层,请求的参数, 这个对象,专门用来接收参数,以及判断字段的正确性

dto:这个专门用来做对象传输用 , 因为请求的参数和最终存入数据库的 是不同的 ,且查询数据库出来的时候  还会冗余很多查询信息

po:这个专门跟数据库字段一一对应, ORM对应存入数据库的

24:对于分层思想  Service层之间尽量不要去调用别的层的dao   比如 orderService 里面有userDao,而且controller里面更加不能调用userDao

25 对于每个接口实现  最后返回 对象  而不是NULL  (effect in java),比如 list   返回一个长度为0的arraylist.

26:能在controller判断的就尽早返回  减少远程调用

27:远程调研可以写批量接口

28 越简单的验证放在前面   这样后面的验证可以减少,能尽早返回

时间: 2024-10-27 03:11:29

代码最佳实践的相关文章

(Android第一行代码实验一)活动的最佳实践

活动的最佳实践    1.知晓当前是在哪一个活动         这个技巧将教会你,如何根据程序当前的界面就能判断出这是哪一个活动.  首先需要新建一个 BaseActivity 继承自 Activity,然后在 BaseActivity中重写 onCreate()方法.         public class BaseActivity extends Activity {                @Override              protected void onCreat

编写超级可读代码的15个最佳实践

译自:http://net.tutsplus.com/tutorials/html-css-techniques/top-15-best-practices-for-writing-super-readable-code/ 译者:蒋宇捷        一月两次,我们重温Nettuts历史上读者最喜欢的文章. 代码可读性是一个计算机编程世界的普遍主题.它是我们作为开发者第一件学习的事情.这篇文章将阐述编写可读性代码十五个最重要的最佳实践. 1 – 注释和文档 集成开发环境IDE在过去的短短几年里走

iOS应用开发最佳实践:编写高质量的Objective-C代码

本文转载至 http://www.cocoachina.com/industry/20131129/7445.html 点标记语法 属性和幂等方法(多次调用和一次调用返回的结果相同)使用点标记语法访问,其他的情况使用方括号标记语法. 良好的风格 : view.backgroundColor = [UIColor orangeColor]; [UIApplication sha “” 阅读器 本文由“海水的味道"编译 点标记语法 属性和幂等方法(多次调用和一次调用返回的结果相同)使用点标记语法访问

最佳实践扩展Windows窗体DataGridView控件 .net 4.5 附示例代码

Windows窗体DataGridView控件的性能调优.net 4.5 在处理大量数据时, DataGridView 控制可以消耗大量的内存开销,除非你仔细地使用它. 在客户有限的内存,你可以避免一些这方面的开销,避免内存成本高的特性. 你也可以管理的部分或全部数据维护和检索任务自己使用虚拟模式为了定制的内存使用情况. 在这一节中 最佳实践扩展Windows窗体DataGridView控件 描述如何使用 DataGridView 控制,避免了不必要的内存使用和在处理大量数据时的性能损失. 虚拟

谷歌最佳实践 - 如何写代码审核评论

来源 如何写代码审核评论 概述 友善一些 清楚的阐述你的理由 要在清楚地给出方向和指出问题后让开发者自己决定之间做好平衡 鼓励开发者简化代码或者添加说明,而不是解释代码为什么这么复杂 礼貌 通常当你在审核别人的代码时,友善.尊重.提供清晰.有效的意见对于开发者是非常重要的.做到这个的方法是在评论中只针对代码,而不是开发者.你不一定需要一直按照推荐实践来操作,但是当你说一些负面的或者有争议的意见时一定要按照规范来.例如: 错误:"为什么你在这种明显不需要并发的场景使用多线程呢?" 正确:

Spark SQL下的Parquet使用最佳实践和代码实战

一:Spark SQL下的Parquet使用最佳实践 1,过去整个业界对大数据的分析的技术栈的Pipeline一般分为一下两种方式: A)Data Source -> HDFS -> MR/Hive/Spark(相当于ETL) -> HDFS Parquet -> SparkSQL/impala -> Result Service(可以放在DB中,也有可能被通过JDBC/ODBC来作为数据服务使用): B)Data Source -> Real time update

45个实用的JavaScript技巧、窍门和最佳实践

如你所知,JavaScript是世界上第一的编程语言,它是Web的语言,是移动混合应用(mobile hybrid apps)的语言(比如PhoneGap或者Appcelerator),是服务器端的语言(比如NodeJS或者Wakanda),并且拥有很多其他的实现.同时它也是很多新手的启蒙语言,因为它不但可以在浏览器上显示一个简单的alert信息,而且还可以用来控制一个机器人(使用nodebot,或者nodruino).掌握JavaScript并且能够写出组织规范并性能高效的代码的开发人员,已经

毫秒必争,前端网页性能最佳实践

你愿意为打开一个网页等待多长时间?我一秒也不愿意等.但是事实上大多数网站在响应速度方面都让人失望.现在越来越多的人开始建立自己的网站,博客,你的网页响应速度如何呢?在这篇文章中我们来介绍一下提高网页性能的最佳实践,以及相应的问题解决方案,让站长或者即将要成为站长的朋友了解如何去测试和提高网站响应速度,对自己的网站更有信心. 最佳实践 最佳实践我们引用的来自yahoo前端性能团队总结的35条黄金定律.原文猛击这里.下面我们分门别类将每条的关键点总结一下. 网页内容 减少http请求次数 减少DNS

atitit.手动配置列表文件的选择and 数据的层次结构 attilax总结最佳实践--yaml

atitit.手动配置列表文件的选择and 数据的层次结构 attilax总结最佳实践--yaml 1. yaml是个好的选择.. 1 2. 数据的层次结构--结构:hash,list,和block literal. 1 3. yaml跟json的实现区别 1 4. xml的优点及json的问题 2 4.1. ide友好 2 4.2. JSON也适合与任何数据,复杂struts难以阅读 2 4.3. json难以手工维护 3 5. 基于YAML的开源项目解析YAML文件最常用的Java库是JvY