个人BO之强类型

个人BO
1-个人BO之强类型
2-个人BO之数据保护
3-个人BO之状态控制
4-个人BO之导航属性html

弱类型的缺点

有些程序员对类型比较随意,从前端传来的数据,无论应该是什么类型,都以String接收。而后在什么地方转成应该有的类型则要“看心情”,在Controller, Service, DA都有,甚至有从头至尾都不转为正确类型的。这里把一切都用String表示称为“弱类型”,相应地该是什么就是什么类型称为“强类型”。好比Service方法的参数清一色String型的,其中的参数的位置传错了也发现不了。Long,Date型也是按String在各层之间传送,若在DA层没有一个强有力的组件保障,很容易就被黑客SQL注入。有些中途要做运算,不得已转为强类型运算,而后由于下一级是弱类型,又转为弱类型继续传递。许多地方明明能够判断两个值是否相等,却由于类型不一样须要先做转化,转化的过程又由于值是null而出错,恰恰出错方面又没处理好,真是接连挖了几个坑等着人跳。前端


图:该是什么就是什么程序员

正确的作法是用最正确的类型表示和传送每个数据。至少在BO这一层,要彻底强类型。数据库

枚举类型

在DTO和数据库中,多是String,多是Integer,但对于BO来说,它就只应该是枚举类型。这样无疑对业务处理是最方便的。后端

日期时间类型

先后端交互时,出于方便调试的目的,咱们采用字符串来表示,具体格式是yyyy-MM-dd HH:mm:ss。 在DTO中体现为String型,而在BO中则为Date类型。调试

Java的Date出现得早,受普遍各类组件的支持,但运算不方便,LocalDateTime运算方便,但出现得晚,不受普遍支持。用Date仍是LocalDateTime都算强类型。原本应该采纳运算方便的LocalDateTime,但考虑到须要运算的可能性小,不须要运算的可能性大,若采用LocalDateTime,就会增长没必要的正反两次与Date转化。最终决定两种类型同时支持,内部关联同一个数值。在须要运算时,读写LocalDateTime型的属性时自动转化,在不须要运算时读写Date型的属性则不会产生两次额外的转换。两种类型之间的转换由BO内部自动完成,外部使用时哪一种类型方便就用哪一种,十分方便。code

强类型的优势:

  1. 防止SQL注入
  2. 方便运算
  3. 正确的取值范围

以前个人一篇文章推荐使用的7种基本数据类型讲到这方面。在数据库提供的不少种类型支持的状况下,咱们也只挑战少数几种类型使用。在BO层则是以最贴切的类型来使用,并不局限于7种。好比BO中使用的枚举型,在数据库中每每表现为String型或Integer型。二者并不矛盾。htm

系列导航

1-个人BO之强类型
2-个人BO之数据保护
3-个人BO之状态控制
4-个人BO之导航属性blog

相关文章
相关标签/搜索