首页 > 解决方案 > 将映射逻辑从适配器存储到数据库

问题描述

我正在构建一个 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
        };
    }
}

这种方法的最大缺点是,每次我需要新的适配器来适应新的苹果种类时,我都必须编辑服务。所以最好将它们存储在数据库中......

问候, 多姆

标签: javascripttypescriptservicenestjs

解决方案


推荐阅读