后台取出数据转换成Json格式返回给前台,前台使用jquery 中的Datagrid(具体是哪种Datagrid不限,情况都类似),若数据有参数性质的编码,如性别,Male 代表男,Femal 代表女,则需要将编码转换为文本显示到界面上,这种情况如何处理?
自己能想到的有几个思路:
1.使用Datagrid本身支持的格式化js函数进行转换,通常就是在里面写if else 分支,但仅适合参数值项较少的情况,如性别/是否等,若参数值多,如省份,则直接用js写分支不可行,且后台参数值增删需前台页面也作相应调整,明显不合理,只能通过ajax去后台取参数编码对应的值,每一行都去取则存在严重性能问题。
2.后台在取得数据后,先将编码转换成显示名称,再json处理返回给前台,这样做同样需要在后台对使用参数的字段循环处理,使用参数化字段比较多的情况下,写起来也挺繁琐。
注:使用EntityFramework+分层,以前直接通过sql多表联合查询将参数值批量转换成显示名称的方式不可行,除非是使用nativeSql。
这个问题应该是很常见,请问各位,有何比较好的处理方式,简洁/优美又不会牺牲性能,谢谢
第一种方法是非常不合适的,通常两种方法比较的话,还有优缺点,没有想到你这两种方法提出来,
全是第二种方法的优点,第一种方法的优点正在构思中....
确实如你所说,这种场景所有人都会遇到,通常解决方法有:
1、数据冗余,在数据表中除了有编码ID外,还有可视冗余字段,这样可以在查询时不进行任何处理,
直接显示用户可视字段。(缺点有,你应该知道的,优点是以合理的并且承受的代价,空间换时间)
2、视图VIEW,这个不是MVC中的VIEW,而且数据库中的。
3、你说的代码转换功能,至于你所用的技术有什么局限性之类的,应该问题不大,好多方法可以处理呢。
比如对于性别,可以全局缓存在内存里面,国家好象也可以,这些不怎么经常变的。
以上几点基本都是在后台进行的,由于WEB开发的复杂性,不建议再为了这个给前台增加复杂性了,
必竟只是为了显示,如果说是为了编辑,那另当别论。
跟我想得差不多,确实web前段工作轻一些好,在后台转换算了,把系统参数表扔到内存里缓存起来提高性能,看来没什么更好的方式了,
使用第二种,把 客户端要的数据返回即进行一次转换。不需要把所有的字段都返回,按需格式化数据的都在后台处理,减少客户端压力及网络传输。
用viewmodel
展示的实体本来就是viewmodel.UI从数据库取出数据后,绑定到viewmodel上,
绑定的时候以什么规则
数据库里存的是编码,前台展现的是名称,即使用viewmode,还是有个model到viewmodel转换过程,你说的只不过是跟我第二种方式类似,从model转换成viewmodel示处理