`

能使用简单类型达到目的的地方绝不使用复杂类型

    博客分类:
  • Java
 
阅读更多
以下都是偶们经理说滴~
Long是java实现的复杂类型,long是java虚拟机提供的原始类型。 任何Long类型的比较和运算实际上都要经过拆箱转换成原始类型方能进行,而long类型的运算是直接经过寄存器,运算速度是Long的十几倍甚至是几十倍(参看我写的一个简单的对比测试:com.everbridge.platform.dashboard.test.FunnyTest)。
    所以,很多java专家的意见都是,能使用简单类型达到目的的地方绝不使用复杂类型。其实,这也是我们编程需要遵行的原则,尽量用简单,可复用的方法解决问题,避免过度设计
    遗憾的是,咱们现在的代码里面无论是前端还是后端都有很多绕弯的实现和逻辑。咱们开发已经进入bug fix的阶段,这是一个很好的改进代码,提高质量的机会,请大家在fix bug的时候,尝试以下几个步骤:

    碰到一个bug,不要急于修改,先整体思考一下之前的实现逻辑,是否可以截弯取直,化繁为简(比如,在咱们的service中,有许多的service接口实际上只是wrap了另外一个service的实现,没用任何必要,service的接口本来就是在controller层聚合使用的,wrap到一个service里面除了增加复杂性,貌似没有其它的任何好处)
    看看别人的代码里面有没有类似的场景,别人是如何处理的
    在想想bug里面提到的代码没有覆盖到的情况是否还有其它的可能性
    尽可能在修改bug时补一些之前没有的单元测试,保证对你的service接口进行单元测试
    清理你代码里面的垃圾,包括:无用变量声明,未用到却注入的依赖,不再使用的private方法等
    使用统一的模板格式化代码(参看:https://github.com/Everbridge/omnidocs/tree/master/platform-doc/codetemplate),干净清爽的代码会给你带来好的心情
    对于之前不好的实现,不一致的接口或者有歧义的接口予以重构并通过单元测试来保证修改的正确性


    我们的目的不是单纯的修改bug,而是扎实的提高代码质量,提高产品的稳定性,可用性和性能,最终给用户带来良好的体验。
分享到:
评论

相关推荐

    第四课 其他原始类型1

    原始类型与对象类型结合使用,可以构建出更复杂的类型系统,提高代码的健壮性和可维护性。 总结来说,Any、Void和Never是TypeScript中特殊的原始类型,它们分别用于放宽类型约束、表示无返回值和表示无法达到的值。...

    反编译中数据类型重构技术研究

    反编译是软件逆向分析的重要手段...型传播方程,从而达到类型细化的目的;通过分析复杂数据结构的存储特点及寻址方式, 以等价类划分的思想求取复杂数据结构的内存布局,并以已得到基本类型来恢复复杂数据 结构的类型。

    卡巴激活终结者--可达到免费使用杀软的目的

    卡巴激活 可达到免费使用杀软的目的 卡巴激活 可达到免费使用杀软的目的

    Informix 用户例程与数据类型开发指南

    根据提供的文件信息,“Informix 用户例程与数据类型开发指南”这一标题以及描述明确指出了文档的主要内容将围绕IBM Informix数据库系统中的用户...希望本文能为正在学习或使用Informix的开发者们提供有价值的参考。

    SQL Server中修改“用户自定义表类型”问题的分析与方法

    前言 SQL Server开发过程中,为了传入数据集类型的变量(比如接受C#中的DataTable...为了达到公用的目的,有时候一个TableType可以在多个地方分别被引用到,这样的话,势必要先删除所有的引用了这个“用户自定义表类型

    使用ATL建立一个包含2个接口的COM组件,使用VC Win32 Console Application进行客户程序的开发,达到调用该组件中这3个方法的目的

    2、使用VC Win32 Console Application进行客户程序的开发,达到调用该组件中这3个方法的目的。(必须通过IDispatch接口进行字符串的小写转换调用,两个接口之间使用QueryInterface()使用进行切换,然后通过Vtable直接...

    米歇尔.沃尔德罗普-复杂.pdf

    然而,复杂科学认识到,整体行为往往不能简单通过部分的分析得出。复杂系统通常展现出非线性的动态特性,它们由许多相互作用的元素组成,这些相互作用能够产生出意料之外的行为模式,如自组织、临界态、混沌和适应性...

    dotnet-RestEase易于使用的类型安全RESTAPI客户端库具备简单和可定制

    最后,"具备简单和可定制" 强调了库的灵活性,既能满足基本的简便使用,也能适应复杂的个性化需求。 **标签解析:** ".NET开发-HTTP请求库" 进一步明确了这个库是.NET框架下的一个开发工具,特别关注HTTP请求,也...

    java 带两个类型参数的泛型

    在Java编程语言中,泛型是一种强大的特性,它允许我们在类、接口和方法中使用类型参数,从而提高代码的灵活性和可复用性。当我们谈论“java带两个类型参数的泛型”时,这意味着我们正在处理一个泛型类或泛型方法,...

    在fluent中改变边界条件类型,使用UDF控制

    标题中提到的“在Fluent中改变边界条件类型,使用UDF控制”是指通过编写UDF程序来调整或扩展Fluent中的边界条件。边界条件是定义流场计算域边界的物理特性,如速度、压力、温度等,对流体流动的模拟结果至关重要。...

    验证码【复杂的和简单的】

    本话题将详细讲解验证码的两种类型:复杂验证码和简单验证码,以及它们在实际应用中的使用场景。 首先,简单验证码通常是由随机生成的一串数字或字母组成,设计目的是让用户通过肉眼识别并输入到输入框中,以此来...

    MISRA-C:跨越数据类型的重重陷阱

    MISRA-C(Motor Industry Software Reliability Association C)是一套用于汽车工业中C语言编程的规则,目的是提高软件的可靠性、安全性和维护性。这个规范由一组定义明确的编码标准组成,这些标准主要关注如何在...

    Graphene 项目的目的是使用非常性感的类型安全的 API 进行 Ajax 测试,是 Selenium 项目的扩展

    Graphene 项目的目的是使用非常性感的类型安全的 API 进行 Ajax 测试,是 Selenium 项目的扩展

    Oracle数据库的锁类型

    这种锁的目的是确保数据的一致性,避免脏读、不可重复读等问题。 #### 四、意向锁:提高锁检查效率 意向锁是在上层结点(如表级)做出的一种标记,用于指示下级结点(如行级)的锁类型。例如,当在行上加X锁时,会...

    使用SOCK-DGRAM类型的socket实现的ping程序

    传统的`ping`程序通常使用`SOCK_RAW`类型的socket来实现,因为`ICMP`(Internet Control Message Protocol)协议并非应用层协议,而是直接与IP协议交互的。然而,`SOCK_RAW`需要root权限,且处理IP报头解析较为复杂...

    Chomsky文法类型判断

    0型文法:在0型文法中,产生式左右部可以使用"非终结符"和"终结符"随意组合,但左部不能为空。例如,文法G = ({S, A, B}, {a, b}, P, S) 中,产生式可以是S -> aA、A -> bB、B -> ε等。 1型文法:在1型文法中,在0...

    icmp报文类型说明

    - 12:目的主机服务类型不可达。 3. **源抑制(Source Quench,类型4)**: - 当路由器接收到的数据包过多时,用来通知源主机减少数据发送速率。 4. **重定向(Redirect,类型5)**: - 用于告知发送主机有更优...

    KSOAP2序列化复杂参数

    为了达到这个目的,可以通过覆盖`KvmSerializable`接口中的方法来自定义序列化过程,确保所需的属性被正确地设置,而不是默认的`anyType`。 **3. 接收并映射复杂类型** 接收复杂类型的响应时,同样需要定义一个...

    限制输入的字符类型C++ MFC

    当用户尝试输入非数字字符时,我们发送一个自定义消息来取消输入,从而达到限制字符类型的目的。记得将`IDC_EDIT control ID`替换为实际编辑控件的ID。 更复杂的情况可能需要处理更多类型的字符,例如字母、符号或...

    JavaScript js数据类型及类型转换 示例代码

    本资源主要包含JavaScript数据类型转换相关的示例代码 其中包含了将值转为数字类型、将值转为字符串类型、将值转为布尔类型三种情景的示例 以及特殊情况下转换的注意事项 JavaScript 是一种广泛使用的脚本语言,...

Global site tag (gtag.js) - Google Analytics