======== 关于字段映射 类调用 数据读取逻辑============

愚者只看星不看答案 2019-05-07 09:31:47
假设当前有一个用户表有以下字段
ID
UserName
Email
ZipCode
Address
PhoneNumber

有一个用户实体类,和上面的表字段完全对应。

现在让你开发一个类库,其中包含以下方法

一个用于读取用户表中的所有用户集合的方法 GetAllUsers,返回 用户实体类 的集合
一个读取指定用户的 GetUserById 方法,返回一个 用户实体类

现在有以下不同的若干页面
A页面,仅仅显示 ID UserName
B页面,仅仅显示 ID UserName Email
C页面,仅仅显示 ID UserName PhoneNumber

因为你在开发类库让别人调用,所以你无法知道别人会不会使用 PhoneNumber 这个字段,所以你在类中的每个方法中都查询出了 PhoneNumber 这个字段,但是如果从业务需求的层面来看,A,B页面并没有使用到 PhoneNumber, 返回这个字段对于 A,B页面并没有意义,尤其是在表数据量大的情况下,浪费带宽及其它资源 。
这个问题,你们是怎么处理的?

如果为了避免这种浪费,你创建了以下方法
GetAllUsers_For_PageA ,返回 用户实体类 的集合,除 ID UserName 以外,其实属性值都为null

GetAllUsers_For_PageB,,返回 用户实体类 的集合,除 ID UserName Email 以外,其实属性值都为null

GetAllUsers_For_PageC,,返回 用户实体类 的集合,除 ID UserName Email PhoneNumber以外,其实属性值都为null

这样最大程度上节省了资源,但是返回的是相同的 用户实体类,在
GetAllUsers_For_PageA 的情况下 Email 为 null 值

GetAllUsers_For_PageB的情况下 Email 不为null值

在这种情况下,你又如何在文档中解释 用户实体类 的 Email 属性在什么情况下是 null ,什么情况下是非 null ,这个同样很奇怪..

请问大家,你们平时怎么处理此类情况?多谢

一直很困惑这样的问题,请大家耐心指教。。
...全文
54 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
游北亮 2019-05-07
  • 打赏
  • 举报
回复
常见情况是,前端调用后端提供的接口, 现在很多项目,都已经微服务化,各个基础服务提供基础数据接口, 如果按常规作法,前端需要调用很多个后端接口,再进行数据组合,确实存在浪费公网连接和流量的情况,用户体验也很差。 所以我们的前端会用nodejs,在前端与后端中间做一个聚合网关,简单说就是一个数据组合站点,根据前端需要组合数据返回。
  • 打赏
  • 举报
回复
引用 1 楼 水边2 的回复:
如果是为了节约流量,你就不应该返回实体,而是返回类似于Protobuf那样的value组合。 我们的做法是返回通用数据,由调用方的网关层自行选择需要的字段,再返回给前端, 这样,浪费的流量是在内网,问题不大。
感谢回复,不太理解 "由调用方的网关层自行选择需要的字段"
游北亮 2019-05-07
  • 打赏
  • 举报
回复
如果是为了节约流量,你就不应该返回实体,而是返回类似于Protobuf那样的value组合。 我们的做法是返回通用数据,由调用方的网关层自行选择需要的字段,再返回给前端, 这样,浪费的流量是在内网,问题不大。

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧