javascript - 将映射逻辑从适配器存储到数据库
问题描述
我正在构建一个 Nestjs 服务,我必须在其中规范化来自不同来源的多个 JSON 消息。每个来源都有不同的 JSON 结构。目前我在 Typescript 中使用适配器,但如果我可以将这些翻译映射存储在数据库中会更好。你对这个问题有什么想法或者可能是一个例子的链接?但首先让我展示一下我目前所拥有的:
我服务中的 Normalizer 函数:
private normalizeMessage(event: any, driverId: string): MessageDto {
const adapter = this.getAdapter(driverId);
return {
event: adapter.adapt(event)
}
}
getAdapter(driverId: string): MessageAdapter {
let adapter = this.adapterMap.get(driverId);
if (!adapter) {
switch (driverId) {
case 'Granny Smith':
adapter = new GrannySmith_Adapter();
break;
case 'Cox Orange':
adapter = new CoxOrange_Adapter();
break;
case 'Golden Delicious':
adapter = new GoldenDelicious_Adapter();
break;
default:
break;
}
if (!adapter) {
throw new Error('Adapter not implemented: ' + driverId);
}
this.adapterMap.set(driverId, adapter);
}
return adapter;
}
适配器接口:
export interface MessageAdapter {
adapt(event): NormalizedEventDto;
}
一个解释。适配器:
import { NormalizedEventDto } from "../../../../../../model/dist";
import { MessageAdapter } from "../message-adapter";
export class GrannySmith_Adapter implements MessageAdapter {
adapt(event): NormalizedEventDto {
return {
appleName: event.apple.name, // here I map the individual nodes of the given JSON on my normalized JSON
appleLocation: event.apple.location,
[...],
original: event
};
}
}
这种方法的最大缺点是,每次我需要新的适配器来适应新的苹果种类时,我都必须编辑服务。所以最好将它们存储在数据库中......
问候, 多姆
解决方案
推荐阅读
- c# - 获取json文件的最后一个元素
- azure-devops - Azure DevOps Pipelines:Newman 是自托管代理 (Windows) 上 Postman 的 cli 伴侣
- python - Plotly:使用 plotly 和 datetime 索引绘制时间序列
- php - 通过 docker-compose.yml 运行 php 脚本
- c# - 使用 Moq 模拟 DbSet.Where(lambda)
- javascript - User connected to voice channel?
- c++ - 使用另一个字符串从字符串中删除空格
- reactjs - react-router-dom v ^5.2.0 路由故障排除
- python - 沿着路径/分支迭代:Networkx
- sql - 如何将 DLookup 中的值插入表中