java吧 关注:1,215,847贴子:12,662,699
  • 64回复贴,共1

编码小习惯

只看楼主收藏回复

hello,这里对于自己在工作中总结的一些编码习惯进行分享。
如果有异议也欢迎在相应的楼层下探讨。


IP属地:安徽1楼2021-05-28 09:05回复
    关于package命名。
    原则:命名尽可能与做什么事情有关,而非与什么功能有关。
    这里讲的话可能大家不方面理解,这里以spring-boot-autoconfigure 以及disruptor两个包的package命名举例。这里大家也看到,这里面的package的命名方式都是说在做某件事,而不是说这个包有哪些功能。
    避免在一个包中,拆分出太细的结构,比如,一个redis包里包含了redisFactory,redisPool,redisConnection等,就不需要为其单独写什么factory,pool,connection之类的包。 他们都是为了为redis服务,即可以在一个package下。
    而像什么commonsUtils,不是针对某个package独有的util,如一些beanUtils,timeUtils,是可以放在一个类似utils包里,这种描述与抽象,或者通用功能有关的类是可以单独放在一个以功能有关的类里的。
    试想,大家写了几年的controller,service包,如果以user、auth、***业务模块命名,你找代码是不是会更轻松一些?



    IP属地:安徽2楼2021-05-28 09:16
    回复
      关于工具类,
      一些方法都是static的工具类不应该存在构造方法,默认上是不可以new的。它的方法的调用就应该按照通过其class类来访问。
      我不清楚有没有人看到过这种写法。工作几年,换过几家公司,这样写的代码看到过不止一次,而且类似github上,一些开源软件也这样写。不知道给国外的人看了会不会觉得丢人。


      IP属地:安徽3楼2021-05-28 09:26
      收起回复
        关于Result,以及一些相关参数的命名。如下,是本人比较习惯的返回值格式,



        然后这个ErrorCodeEnum枚举就....
        很矛盾,因为这个枚举代表的是ErrorCode,但是里面居然有SUCCESS?感觉就好像一个猪圈里塞了一头驴,不伦不类的。
        而且,我建议大家定义枚举的时候,里面的属性使用final修饰,表示不可变。
        同时枚举也应该包含常见的of***的静态方法,通过某种属性值来获取该枚举。

        下面是我自己使用的resultCode,


        IP属地:安徽4楼2021-05-28 09:37
        收起回复
          先更新这些,后面有机会再补充,
          希望一些工作几年,还没有形成自己风格的开发同学能够多写代码多积累。
          能够形成自己的一套严谨的编码习惯。
          刚入行的,刚开始学习的人,可以先不急着这些。以后慢慢来都可以。


          IP属地:安徽5楼2021-05-28 09:41
          回复
            收藏了


            IP属地:四川来自Android客户端15楼2021-05-29 00:17
            回复
              楼主🌹🌹🌹我想知道接口的命名和对应实现类的命名是怎么规范的? 需要创一个impl包和interface包来分别存放它们吗?


              IP属地:广西来自Android客户端16楼2021-05-29 15:19
              收起回复
                今天遇到两个说到spring的全局异常的。
                spring为我们提供了全局异常的捕获方式,使得很多500的错误能够以一个比较良好的数据格式展示给前端。
                但是这里滥用的话就容易带来一些弊端。
                异常每出一次栈,都会带来很高的性能损失,比return要高很多。有兴趣可以自己了解一下。如果不加以控制,即在适当的时候捕获就容易带来性能浪费。这在写并发代码的时候是很不可取的。
                同时,在我看来,滥用这种机制也可以理解成你对java的异常的本质是不够理解的。
                个人建议在适当的地方,合理的捕获异常,并加以处理,如果可以尽量使用return的方式,避免继续抛出。
                这里我就不发代码了。如果对异常机制不是很清楚的同学欢迎在此贴中评论。


                IP属地:安徽17楼2021-05-29 19:06
                回复



                  IP属地:安徽18楼2021-05-29 19:48
                  收起回复
                    dalao 好奇一个问题,就是为什么我在eclipse打开别人的jar包里的class文件后可以看到源码? class文件不是编译好的字节码文件吗?


                    IP属地:广西来自Android客户端19楼2021-05-29 22:22
                    收起回复
                      我这里用一个有个TestServiceContext继承我上面写的抽象类。
                      然后这里用PostConstruct注解使其在初始化后调用。



                      IP属地:安徽20楼2021-05-30 09:28
                      收起回复
                        spring容器里已经有singletonObjects了,本来就可以getBean,这边抽象类再多一个beanMap没啥意义。那个构造方法后init,如果在spring还没有对aware进行处理前,init将会抛出空指针的。


                        IP属地:浙江来自iPhone客户端21楼2021-05-30 19:59
                        收起回复