
1 MiguelValentine Mar 3, 2017 (!sex)?"女":"男"; 前端啊。 |
2 JamesRuan Mar 3, 2017 变量名为 is_man ,在视图层转换。 变量名是 gender ,则应该直接把文字保存在数据库。 如果变量名是 gender ,还存 0 和 1 ,应该把设计数据库的人抓出来打一顿(逃 |
3 fwrq41251 Mar 3, 2017 jpa AttributeConverter ,业务代码里应该只有枚举,没有 0,1 啥的 |
4 340244120 Mar 3, 2017 via Android 方案一 数据在显示层之前做转换,枚举比较多的话,可以用工具类进行转换。 方案二 显示层处理。缺点是前端工作量更多。优点是数据传输量相对少;前端快速实现多国语言切换等 |
5 rason OP @MiguelValentine 要转换的地方太多的话会累死前端,而且还得沟通告诉前端啥对应啥。 |
8 JamesRuan Mar 3, 2017 @rason 多国语言支持可以存专门的翻译用表,至少我知道 EVE 的数据库是这么设计的。 关键点在于,**别把 0->女 1->男这样的数据关系不当数据**。既然是数据,存数据库自然是最直接的。 说优化传输量的可以省省了,这明明是“过早优化”,减少传输数据量一个 gzip 就能搞定。 说优化储存量的,你要不用 is_man 这样的变量名,存 boolean ,要不就老老实实存字符类型。说不定哪天有个需求要求支持男女外的其他性别呢?( facebook ?) |
9 shakespaces Mar 3, 2017 一般来说给前端吧 |
10 MiguelValentine Mar 3, 2017 @rason 关键前端在设置性别的时候,肯定传 0/1 吧。你们的业务不会传回来男女吧。刚好前端双绑定。 |
11 kanezeng Mar 3, 2017 看情况吧,某些极端情况下,为了灵活调整,在数据库里建一个专门的对应表也可以吧。 以性别为例(当然这个不是特别极端,所以不是很合适,看看意思就好),比如建个性别表,有 id ,有描述,里面可以随时添加,比如:男,女,不男不女,变性,保密。。。。。。 用户表就存性别 id 就好了,传给前端的用户数据可以有 id ,也可以附带一项比如 gender_desc 把对应的描述加上啊。 |
12 rason OP @MiguelValentine 嗯,这样做就是把锅丢给前端来玩了,所以想看看大家有没有什么好的解决方法。 |
14 R18 Mar 3, 2017 前端 |
15 moguiyu Mar 3, 2017 你这个举例,要是在某国,肯定会被一大波政治正确的多性别人士挑战,笑 |
16 zk123 Mar 3, 2017 ## 为啥不直接在 user 中存男女 |
17 otakustay Mar 3, 2017 前端转换,我的原则永远是面向用户的转换就在最靠近用户的层,如果前端还有 MVC 分层,那么就在 V 转换,这是架构的原则而不是丢锅,我作为前端只会尽量把这种转换的工作往自己这边揽,相比之后的沟通更新升级要省力多了 前端里实现枚举这样的结构用于做这些转换 |
18 QAPTEAWH Mar 3, 2017 不好好用个 enum 表示用什么 0/1... 当然 0/1 挺形象的(逃 |
19 willakira Mar 3, 2017 via iPhone Gender 用 enum 最好 即便不是为了政治正确 也要考虑一下有人不想披露自己性别 至少有男 女 不详 一般我会在写到数据库的前一层(包着数据库的服务那块)才转换 好处是 - 数据库对于服务来说是透明的 - 每个数据库自己有自己的 db service 管编码解码 |
20 joysir Mar 3, 2017 在使用 jsp 时,我会在实体定义一个变量: gengerName , getter 里面 做转换。然后页面直接使用。 如果是接口,则直接返回 0/1 , 很形象 |
21 popbones Mar 3, 2017 |
22 jsq2627 Mar 3, 2017 via iPhone c#的 entity framework 这方面处理很好。应用层全部是 enum 的, enum 到数字的转换由 orm 完成了。 |
23 darrenfang Mar 4, 2017 via iPhone @jsq2627 hibernate 也可以 |
24 ibufu Mar 14, 2017 ['女','男'][sex] |