为什么目前都倾向于使用runtime将json转换成model,而不直接使用工具生成代码的方式?

看了Mantle这个库,依然需要在-JSONKeyPathsByPropertyKey方法中写对应的Keys。使用runtime在性能上也会有影响。直接生成代码不是来的更加方便吗?

阅读 7.5k
7 个回答

Mantle就是你说的用于自动生成Model代码的工具,只是这个库的灵活性很大,对于不同的key怎么transform你可以完全自己定制。
Mantle在你自己定制方式的基础上自己序列化或者反序列化。
我目前代码正在用这个库,感觉非常不错。

推荐这两篇帖子给你

Mantle使用
Mantle是什么

1.费事
2.不好理解维护
3.性能不差啥
4.runtime赋值的库很多有统一容错,安全性更高

直接生成代码会有大量的无用代码,如果 JSON 有1000个 key ,你需要至少有 1000 个属性,还要有 1000 行 xxx.xxx = json["xxx"]; 的代码。

首先,用JSONModel就可以不用写上对应的 keys 了~ 我没用过你说的这个库,如果每个 key 都需要写的话,我觉得体现不出什么优势~

其次,用工具生成代码,我觉得就可能出现潜在的不一致。model 一旦改变,比如添加了哪个字段/字段改了,忘了改生成的代码或者忘了重新跑一遍工具,就会取不到值,属性一直是 nil 还不知道怎么回事。用上 runtime 的转换,至少可以避免人为的疏忽~

新手上路,请多包涵

本人目前还是用手动写的比较多,不过观察,jsonmodel确实是好东西

还不如用MJExtension来得简单。不过感觉用常量作key,字典取。比较灵活。(你不觉得有很多用不到的属性也转model很浪费吗?)

大部分情况下,解析的数据都不会很大,手机的性能完全可以满足这点开销。基于这点,会有以下好处:

最大好处

  • 就跟语言设计出变量类型,比如对于编译出来的二进制文件来说,变量类型甚至'变量名'都已经没有意义,它索引数据的方式是内存地址,编程语言设计这些规则,为的就是最大程度防止人为出错。如果没有其他因素影响(比如性能),我们应该尽可能利用语言特性,显示表达我们的编程意图,这样可以将很多错误在运行之前就规避掉!
  • 写成属性最大的好处是,可以显式地表达你的编程意图,这样就可以在编译期间排除很多不必要的错误,在运行之前就可以排查一些错误!

其他好处

  • 对于数据,我们可以抽象出模型,数据如果存在复杂的运算,我们可以很自然的放到模型内的方法进行处理,对于代码的分层有很大好处。
  • 还可以减少很多常量,常量的不规范使用,很多情况下是BUG的罪魁祸首。
  • 优雅地进行注释,对于日后维护,或者别人的阅读,简直是享受!

更多的好处,还需要使用者再去体会,不同的方式,都去试试,说不定还可以总结出新的方式

推荐问题
宣传栏