开发者社区> 问答> 正文

希望Model中增加putAttrs(Map attrs)这样的方法?报错

@JFinal 你好,想跟你请教个问题:

model中有两个setAttrs的方法特别方便,但是这个需要检查table字段,不是table字段是不允许set的。我现在有很多需求是这样的,我把一个大表拆成一些小表,处于效率考虑,但是返回到客户端,我希望将这些字段给放到一个对象中,调用setAttrs就报错了,因字段不符合要求。我希望能开放两个putAttrs方法,允许不检查表字段的情况下想attrs加入值。

展开
收起
爱吃鱼的程序员 2020-06-22 17:38:35 511 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

      JFinalModel提供了put方法,当初是为了方便开发者在前端显示非数据库字段数据,从数据库查到List<YourModel>以后,可以先在后端循环对每个modelput点需要在前端显示的数据。

      如果考虑再加个put方法,那么肯定不能叫putAttrs,因为attrs是属性,是与数据库字段对应的,只能考虑加个putMap或者什么别的

    有不需要和table对应的put(String,Object)方法啊,不过你是想一次设置多个吧,这个还真没有。你可以自己继承扩展一下 这种需求如果多的话,还是在框架层来封装吧,自己再整一层只是为了做一些小的修改,代码不太好看

       CPI.getAttrs(Modelmodel)可以得到Mapattrs,然后attrs.putAll(map)就可以了。JFinal目前的设计是为了尽可能避免开发者犯错,如果想打破规则也是可以的,用CPI就可以。

      不过从API的一致性来说,既然有了 model.put(...)那么添加一个model.putMap(...)可以考虑

    其实我不是太支持向model里面放非数据库字段,我觉得尽量去遵循语义,model就是一个table的映射。

    一般有这样的需求我都用record.

    最后落实到入库肯定是用model。。这样的话把无关的字段放进去model没意义,如果是相当vo来使用的话,那么record可以满足的

    引用来自“绝望的八皮”的答案

    其实我不是太支持向model里面放非数据库字段,我觉得尽量去遵循语义,model就是一个table的映射。

    一般有这样的需求我都用record.

    ar模式的一个含义是:

    每一个数据库表对应创建一个类.类的每一个对象实例对应于数据库中表的一行记录;通常表的每个字段在类中都有相应的Field

    我是比较坚持这个原则的。避免语义被异化。

    当然同时我也不是很学术的,觉得怎么好用就怎么来吧。

    2020-06-22 17:38:52
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载