Javascript 存储从适配器到数据库的映射逻辑
我正在构建一个nestjs服务,在这里我必须规范化来自不同来源的几个JSON消息。每个源都有不同的JSON结构。目前,我正在Typescript中使用适配器,但如果我能将这些翻译映射存储在数据库中会更好。你对这个问题有什么想法吗?或者有一个例子的链接?但首先让我展示一下我到目前为止的成果: 我的服务中的Normalizer函数:Javascript 存储从适配器到数据库的映射逻辑,javascript,typescript,service,nestjs,Javascript,Typescript,Service,Nestjs,我正在构建一个nestjs服务,在这里我必须规范化来自不同来源的几个JSON消息。每个源都有不同的JSON结构。目前,我正在Typescript中使用适配器,但如果我能将这些翻译映射存储在数据库中会更好。你对这个问题有什么想法吗?或者有一个例子的链接?但首先让我展示一下我到目前为止的成果: 我的服务中的Normalizer函数: private normalizeMessage(event: any, driverId: string): MessageDto { const a
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
};
}
}
这种方法的最大缺点是,每当我需要新的适配器来进行新的苹果分类时,我都必须编辑服务。所以最好将它们存储在数据库中
注意,Dom当然,您可以在数据库中存储源代码。但这不是一个好主意,事实上这是一场维护噩梦。这与TypeScriptHello AluanHaddad没有任何关系,但存储源代码并不是目标。规范化方法ist由驱动程序数组上的迭代调用,因此我可以使用转换映射(给定适配器的返回值)另外存储一个JSONB字段。但我不知道如何使适配器具有通用性。另一个想法是,如果我有一个文件夹,在那里我只需要放置新的“驱动程序”(地图)并重新启动服务进行维护——在那里我还需要提示。THX当你说在数据库中存储翻译映射时,我以为你指的是存储规范化各种结构(即源代码)的逻辑。拥有一个带有适配器的文件夹并不是一个坏主意,它可能通过约定来解决,以适应这样或那样的事情。我建议您去掉类和接口,只使用普通的旧函数来处理这类事情。