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,则无需返回,如果没有,则查询并返回。
 
            
对于非热数据,或一次性数据,则另外处理。
 
 
 这适用于所有工程化前端框架。
 

 

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • UDP协议解析

    UDP协议解析????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????UDP协议简介UDP是UserDatagramProtocol的简称,中文名是用户数据报协议,是OSI(OpenSystemInt

    2022年6月7日
    46
  • 实现textarea内换行

    为什么会出现这个问题呢?是因为我在做自己个人网站的留言板时,我想预设好textarea的值,像这样,让用户输入的时候直接另起一行!不墨墨唧唧了,直接告诉你们,下面两种方法是没有用的。1.企图在html里面加上<br/><textareacols="15"rows="8"id="Txt">To

    2022年4月3日
    62
  • Bulk Insert命令具体

    Bulk Insert命令具体

    2021年12月7日
    38
  • vue-router 2.0 常用基础知识点之router.push()[通俗易懂]

    vue-router 2.0 常用基础知识点之router.push()[通俗易懂]除了使用创建a标签来定义导航链接,我们还可以借助router的实例方法,通过编写代码来实现。router.push(location)想要导航到不同的URL,则使用router.push方法。这个方法会向history栈添加一个新的记录,

    2022年7月11日
    16
  • PetShop 4.0 官方详解

    PetShop 4.0 官方详解Microsoft.NETPetShop4:将ASP.NET1.1应用程序迁移到2.0发布日期:2006-5-9|更新日期:2006-5-9适用于:Microsoft.N

    2022年7月2日
    28
  • 下拉刷新Demo[通俗易懂]

    下拉刷新Demo[通俗易懂]引用了网上的demo。packagecom.news.utils;importjava.text.SimpleDateFormat;importjava.util.Date;importcom.news.todaynews.R;importandroid.content.Context;importandroid.util.AttributeSet;impor

    2025年6月26日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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