5
回答
【探讨】数据持久化中数据库映射对象属性使用基本数据类型还是相应包装对象类型好?
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

在最近打算的升级开发工具工作中,再次想要探讨这个有趣也有意义的问题:

       数据库映射对象如果是基本数据类型,存储空间会小50%以上,性能也会提高,但也带来问题:
              1、基本类型的默认值0或者false等可能有意义的,从而可能影响数据正确性,也可能限制某些数值标志数据的使用(当然,个人倾向于数值标志数据转为字符标志对象); 
              2、在数据持久时的参数数组化过程中,可能存在基本数据类型转包装对象过程,产生性能开销。

       但是,数据库映射对象如果是相应包装对象类型同样有问题:
              1、对象存储空间增大50%以上,性能也会降低;
              2、数值计算时,不细心的程序员可能在null上面加减乘除,从而同样带来NPE。
  
       关于此问题的争议也一直存在,甚至有人激进提议程序语言可以不要基本数据类型。

想听听各位的意见,严谨而挑剔的意见!谢谢!

附:
    关于数值标志数据,如使用 -1、0、1等来作为操作是否正确执行的状态标志,当然,我个人一般会倾向于使用定长字符串来标志:
      1、字符比魔术数字更容易理解,且可表达的状态在可读性基础上更多;
      2、极端情况下数值可能存在精度问题,如1可能是0.9999......而非恰好是1。

    关于参数数组化,也就是数据映射对象到数据库持久化过程中,某些持久化工具包或者框架需要的手工或者内部处理的处理过程。在这个数组化过程中,普遍会存在违背数组内部数据类型一致性问题,当然,这是可以接受的情况,因为一般不可能数据库表字段数据类型全部一致。

<无标签>
举报
sharedata
发帖于3年前 5回/325阅
共有5个答案 最后回答: 3年前
我个人偏向于使用包装类型,文中提到的前者第1条影响数据正确性确实不太好。后者null操作上倒是可以通过计算工具类解决,统一强制开发人员使用工具类完成计算感觉是可以规避掉的

嗯,使用工具类来处理包装对象的null问题或及数据计算是可选的解决方法,但这带来另外问题:增加复杂度。所以,这个选择的问题是有趣而又有意义的!

本来这个问题是在软件交流(Java平台)群中讨论的,在红薯的地盘发出来就是希望更多人从不同角度来探讨的,所以还请各位在探讨这个问题时少灌水少拍砖!尽量多从存储、性能、一致性、复杂度等多角度来看来探讨问题。谢谢!

附:如果探讨时顺带说说你工作年限或及技术职位等就更好了,从而更好判断不同人不同观点的大致分布情况。

原始类型,实体增加字段时,比需处理非空问题,即数据库要先升级,有时候人多手杂会产生上线故障。包装类型因不要求非空,此问题不存在,但要面临楼主说的java计算时nullpointexception问题,这也可以制定一条规则,比如凡是数字型用getter封装后不允许有Null泄露出去

public Integer getXX(){return xx==null?0:xx;}

如果运维控制的好的话,倾向于原始类型,一致,简单

决定:提供一个开关,喜欢基本数据类型的就用基本类型,喜欢包装类型对象类型的就用对象类型。
顶部