Angular 2 前端 http 传输 model 对象及其外键的问题

Angular 2 前端 http 传输 model 对象及其外键的问题

个人随笔,记录问题及思路草稿,非文章性质。
 
 
对于设备编辑场景,需要显示设备类型(外键),
 
前端有如下 TypeScript model(此 model 和后端实体 model 通常相对应):
 
export class DeviceDef {
  id: string;
  name: string;
  seq: string;
  sn: string;
  modelType: number;
  comEndPoint: ComEndPoint;
 
 应用哪一个?
  deviceTypeId: string;  
  deviceType: DeviceType;
}
 
 
    服务端数据应如何传才能做到,不会因为不小心拉出整个外键链,且统一规范?
      如果让开发在每处地方自行处理返回数据,则开发和可能直接返回整个 deviceType 对象,而 deviceType 对象还有其它外键,从而造成 json 序列化时的级联加载,加载 N 多不需要的数据
 
所以要解决的问题:
  • 避免数据级联加载,加载 N 多不需要的数据
  • 数据缓存,已存在的无需再加载
  • 数据引用一致,对于多个 detail 引用同一个 deviceType 外键,deviceType 应是一个对象(可以获得省内存,和联动更新的好处)。
  • 单个的规范,和列表的规范,尤其是列表,存在很多 item 引用同一个外键的情况。
  • 一套规范和一个处理外键关联的统一框架
 
 
规定,服务端对于外键,统一传 id
那么,外键的数据,如何取得?开发手动再根据外键取得 相关数据吗?
方案1:
    开发人员在 ts 的 model 里,先配置好,那个属性,对应的外键对象是什么,可以用注解配置,或者代码配置
方案2:服务端返回的不是当前 detail 的纯 model,还有一些其它元数据和外键部分数据
 
对于单个查询
{
     item:{
        id:1,name:”设备1”,deviceTypeId:”123”
        // 一对多
        childs:[1,2,3]
    },
    references:{
        deviceType:{
            “123”:{id:”123”,name:”设备1″}
        }
        child:{
          1:{},
          2:{}
        }
    }
}
 
 
 
列表的:
{
 
}
 
 
数据缓存,已存在的无需再加载 的问题好解决
但是,对于要加载一个 detail,但是其外键要等服务端加载完后才知晓本地有没有缓存的情况下
   如何在减少服务端查询从而提升请求速度和服务端先加载外键数据,好减少客户端等待首次请求成功后发现本地没有缓存从而需要二次请求服务器造成 串行查询 等待时间更长?
 
          应需要不同情况不同对待
            如,对于热数据,如设备类型、请假类型 等,很常用,但是数据量又小(即很适合缓存在前端),本地很可能已存在缓存的情况下,服务端采用一种查询策略。  客户端还可相互配合,在请求某个 detail 时,因为需要的外键类型已经知道,则前端框架可将本地以及查询/缓存过了的外键 id 自动追加到这个 detail 的请求头里面(因为是热数据,数据量也不会大,不过这需要定个规则),后端自动解析处理,如果前端已缓存了这个外键 id,则无需返回,如果没有,则查询并返回。
 
            
对于非热数据,或一次性数据,则另外处理。
 
 
 这适用于所有工程化前端框架。
 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/119609.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • MySQL 8.0 新特性:引人注目的哈希连接(Hash Join)

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 作者:不剪发的Tony老师 blog.csdn.net/horses/article/details/1026900…

  • java栈内存不足

    java栈内存不足前置条件:使用命令java -Xmx1g-Xms1g-Xmn256m-XX:PermSize=128m-Xss256k-XX:+DisableExplicitGC-XX:+UseConcMarkSweepGC-XX:+CMSParallelRemarkEnabled-XX:+UseCMSCompactAtFullCollection-XX:LargePageSizeInByte

  • navcat15激活码【最新永久激活】

    (navcat15激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html1STL5S9V8F-eyJsaWNlbnNlSW…

  • 小议AutoEventWireup属性

    小议AutoEventWireup属性1.在web页面添加一个label和button控件ViewCode<%@PageLanguage=”C#”AutoEventWireup=”false”CodeFile=”AutoEventWireup属性.aspx.cs”Inherits=”_Default”%><!DOCTYPEhtmlPUBLIC”-//W3C//DT…

  • ODrive应用 #1 ODrive入门指南[通俗易懂]

    ODrive应用 #1 ODrive入门指南[通俗易懂]ODrive入门文章目录ODrive入门硬件需求需要准备以下硬件:ODrive接线WiringupthemotorsWiringuptheencodersSafety&PowerUPDownloadingandInstallingToolsWindowsOSXLinuxFirmwareStart`odrivetool`ConfigureM02.Set…

  • pcep协议什么意思_什么是SDN「建议收藏」

    pcep协议什么意思_什么是SDN「建议收藏」传统网络设备部署模式来说,基于整个网络状态的决策都要由每台网络设备独立承担,如果执行控制平面功能的模块的处理能力达到了设备极限,即便数据平面带宽仍有富余,也可能会出现瓶颈。此外,如果控制平面决策进程涉及多个节点的信息,如RSVP(ResourceReservationProtocol,资源预留协议)应用场景,那么就需要在节点之间执行额外的通信操作以收集相关信息,进而给设备带来不必要的开销负担。…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号