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)


相关推荐

  • ubuntu/LinuxMint安装RabbitVCS

    ubuntu/LinuxMint安装RabbitVCS在windows下习惯了用tortoisesvn进行软件开发和管理,转到Linux下面,发现有一款和tortoisesvn极其相似的软件rabbitvcs,使用起来相当的顺手。安装过程有点折腾,可能和我用的linux发行版有关系吧。首先添加源,然后安装相应的软件包:$sudoadd-apt-repositoryppa:rabbitvcs/ppa$sudoapt-get

  • matlab 矩阵除法

    matlab 矩阵除法Matlab提供了两种除法运算:左除(/)和右除(/)。一般情况下,x=a/b是方程a*x=b的解,而x=b/a是方程x*a=b的解。例:a=[1  2  3;4  2  6;7  4  9]b=[4;1;2];x=a/b则显示:x=      -1.5000        2.0000        0.5000如果a为非奇异矩阵,则a/b和b/a可通过a的逆矩阵与

  • 计算机ata考试题库答案,ATA考试系统题库【机房系统】[通俗易懂]

    计算机ata考试题库答案,ATA考试系统题库【机房系统】[通俗易懂]职业道德1.下列不属于职业道德修养的内容的是(A)。A、强化职业技能教育B、端正职业态度C、强化职业情感D、历练职业意志2.职业道德作为(D),有着与其它的职业行为准则不具备的特征。A、社会行为准则B、工作行为准则C、社会交往准则D、职业行为准则3.下列不属于职业道德功能的有(D)。A、有利于调整职业利益关系B、有利于提高人民的道德水平C、有利于完善人格D、有利于人的职业生涯规划4..以下不属…

  • GSLB负载均衡策略

    GSLB负载均衡策略负载均衡策略1.静态策略1)基于特定的用户源IP地址:特定的IP地址段定向到特定的POP节点或者虚拟服务器2)基于加权的IP地址:这里的IP地址是服务池中的虚拟服务器的IP地址.他们的权重不同,这样GSLB在为用户请求轮询解析域名时,根据权重来选择IP3)基于加权的POP节点:基于物理上的节点4)基于地理位置:选择一个在地理位置上与用户距离最近的POP节点或者虚拟服…

  • Hadoop学习之编译eclipse插件

    Hadoop学习之编译eclipse插件

  • activex控件被阻止怎么办_javascript console

    activex控件被阻止怎么办_javascript consoleActiveXObject对象启用和返回对自动化对象的引用。此对象仅用于实例化自动化对象,且此对象没有成员。警告:此对象为Microsoft扩展,仅在InternetExplorer中受支持,在Windows8.x应用商店应用中不受支持。语法:newObj=newActiveXObject(servername.typename[,location])参数:newObj:…

    2022年10月14日

发表回复

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

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