个人随笔,记录问题及思路草稿,非文章性质。
 
 
对于设备编辑场景,需要显示设备类型(外键),
 
前端有如下 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,则无需返回,如果没有,则查询并返回。
 
            
对于非热数据,或一次性数据,则另外处理。
 
 
 这适用于所有工程化前端框架。
 

Angular 2 前端 http 传输 model 对象及其外键的问题的更多相关文章

  1. jango 模型管理数据model,数据库外键主键与一对一,一对多,多对多关系

    四.models.py 定义和管理模型: 4.1模型class的属性就映射与数据库的字段参数 继承models.Model class TestClass(models.Model): 4.2在数据库 ...

  2. 【Java EE 学习 69 上】【struts2】【paramsPrepareParamsStack拦截器栈解决model对象和属性赋值冲突问题】

    昨天有同学问我问题,他告诉我他的Action中的一个属性明明提供了get/set方法,但是在方法中却获取不到表单中传递过来的值.代码如下(简化后的代码) public class UserAction ...

  3. 《疯狂前端开发讲义jQuery+Angular+Bootstrap前端开发实践》学习笔记

    <疯狂前端开发讲义jQuery+Angular+Bootstrap前端开发实践>学习笔记 二〇一九年二月十三日星期三2时28分54秒 前提:本书适合有初步HTML.CSS.JavaScri ...

  4. java后端无法接收到前端传递的json对象

    java后端无法接收到前端传递的json对象 一·可能是因为未使用@RequestBody 在Controller层中,要么使用@RestController要么使用@Controller+@@Req ...

  5. Java 前端加密传输后端解密以及验证码功能

    目录(?)[-] 加密解密 1 前端js加密概述 2 前后端加密解密 21 引用的js加密库 22 js加密解密 23 Java端加密解密PKCS5Padding与js的Pkcs7一致 验证码 1 概 ...

  6. model对象之setter方法使用,解决去除空格和将数字转成字符串展示方法

    1.系统中手机号注册的时候,不能含有前后空格.在model对象中过滤~! private String mobile; public String getMobile() { return mobil ...

  7. django的model对象转化成dict

    今天发现一个掉渣天的方法,Django的forms包里面有一个方法:model_to_dict(),它可以将一个model对象转化成dict. In [1]: from apps.dormitory. ...

  8. SpringMVC 前端获得定义JSON对象的方法

    SpringMVC 前端获得定义JSON对象的方法: 可以使用map进行对象的创建,这样就会解析成键值对,不需要为前端专门定义对象.

  9. Json转model对象,model转json,解析json字符串

    GitHub链接: https://github.com/mozhenhau/D3Json D3Json 通过swift的反射特性,把json数据转换为model对象,本类最主要是解决了其他一般jso ...

随机推荐

  1. Python新式类继承的C3算法

    在Python的新式类中,方法解析顺序并非是广度优先的算法,而是采用C3算法,只是在某些情况下,C3算法的结果恰巧符合广度优先算法的结果. 可以通过代码来验证下: class NewStyleClas ...

  2. CommonJS, AMD ,CMD之间的关系

    commonjs是用在服务器端的,同步的,如nodejs amd, cmd是用在浏览器端的,异步的,如requirejs和seajs 其中,amd先提出,cmd是根据commonjs和amd基础上提出 ...

  3. 第六章:Python基础の反射与常用模块解密

    本课主题 反射 Mapping 介绍和操作实战 模块介绍和操作实战 random 模块 time 和 datetime 模块 logging 模块 sys 模块 os 模块 hashlib 模块 re ...

  4. Go从三个站点中返回响应最快的

    利用协程可以轻松实现 package main import ( "fmt" "github.com/imroc/req" ) func mirroredQue ...

  5. Spring_Spring与AOP

    一.传统编程使用代理解决目标类增强问题 //主业务接口 public interface ISomeService { // 目标方法 void doFirst(); // 目标方法 void doS ...

  6. C#中的异步学习

    C#中的异步 C#5.0版本发布有一个"主题那就是异步编程. 我们先创建一个windowForm窗体,实现下面效果,然后我们通过简单的案例对比同步和异步: 首先我们编写一个耗时方法: /// ...

  7. InnoDB锁机制

    1. 锁类型 锁是数据库区别与文件系统的一个关键特性,锁机制用于管理对共享资源的并发访问. InnoDB使用的锁类型,分别有: 共享锁(S)和排他锁(X) 意向锁(IS和IX) 自增长锁(AUTO-I ...

  8. 【ASP.NET Core分布式项目实战】(一)IdentityServer4登录中心、oauth密码模式identity server4实现

    本博客根据http://video.jessetalk.cn/my/course/5视频整理 资料 OAuth2 流程:http://www.ruanyifeng.com/blog/2014/05/o ...

  9. AOP及spring AOP的使用

    介绍 AOP是一种概念(思想),并没有设定具体语言的实现. AOP是对oop的一种补充,不是取而代之. 具体思想:定义一个切面,在切面的纵向定义处理方法,处理完成之后,回到横向业务流. 特征 散布于应 ...

  10. Jquery_基础(三) ajax与json

    什么是ajax? AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 不是新的编程语言,而是一种使用现有标准的新方法. ...