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