Javascript 存储从适配器到数据库的映射逻辑

Javascript 存储从适配器到数据库的映射逻辑,javascript,typescript,service,nestjs,Javascript,Typescript,Service,Nestjs,我正在构建一个nestjs服务,在这里我必须规范化来自不同来源的几个JSON消息。每个源都有不同的JSON结构。目前,我正在Typescript中使用适配器,但如果我能将这些翻译映射存储在数据库中会更好。你对这个问题有什么想法吗?或者有一个例子的链接?但首先让我展示一下我到目前为止的成果: 我的服务中的Normalizer函数: private normalizeMessage(event: any, driverId: string): MessageDto { const a

我正在构建一个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
        };
    }
}
这种方法的最大缺点是,每当我需要新的适配器来进行新的苹果分类时,我都必须编辑服务。所以最好将它们存储在数据库中


注意,Dom

当然,您可以在数据库中存储源代码。但这不是一个好主意,事实上这是一场维护噩梦。这与TypeScriptHello AluanHaddad没有任何关系,但存储源代码并不是目标。规范化方法ist由驱动程序数组上的迭代调用,因此我可以使用转换映射(给定适配器的返回值)另外存储一个JSONB字段。但我不知道如何使适配器具有通用性。另一个想法是,如果我有一个文件夹,在那里我只需要放置新的“驱动程序”(地图)并重新启动服务进行维护——在那里我还需要提示。THX当你说在数据库中存储翻译映射时,我以为你指的是存储规范化各种结构(即源代码)的逻辑。拥有一个带有适配器的文件夹并不是一个坏主意,它可能通过约定来解决,以适应这样或那样的事情。我建议您去掉类和接口,只使用普通的旧函数来处理这类事情。