2013-10-02 4 views
1

У меня есть устаревшая база данных, которую я хочу выставить на новый новый API.Использование TypScript для сопоставления схем базы данных

Мне нужно отобразить имена полей моделей из старого db в мои новые классы моделей.

Я хочу сделать это безопасным способом, вместо использования только словаря сопоставлений строк, которые подвержены ошибкам.

// The new model. 
class Patient { 
    firstName: string 
    lastName: string 
    dateOfBirth: Date 
} 

var p: Patient; 

legacyToNewModelMappings = 
    "First Name": p.firstName 
    "Family Name": p.familyName 
    "DOB": p.dateOfBirth 

Это хорошо, потому что если я изменить поле в своей новой модели, рефакторинг будет легко и я буду получать предупреждение в моем IDE, если есть проблема.

Однако мне нужно иметь возможность сопоставлять между двумя моделями. Использование ссылок, хотя это означает, что я не могу сопоставить устаревшую БД с новой БД.

Я использую TypeScript в Node.js.

Любые другие подходы, на которые я должен смотреть?

+0

Вы имеете в виду возвращение от новой БД к устаревшей БД? Это проблема JavaScript, не имеющая отношения к TypeScript. Ваше сопоставление должно быть двухсторонним, но хэши объектов JavaScript являются только односторонними. Таким образом, вам нужно либо построить два картографических словаря в двух направлениях, либо использовать поиск свойств по одному из направлений (возможно, наименее используемый). Некоторые библиотеки JavaScript содержат функцию «обратного объекта», которая создает новый объект, переключая ключи свойств со значениями - в этом случае вы создаете одно сопоставление, а затем «реверсируете» его, чтобы получить другое направление. –

+0

Кроме того, ваши legacyToNewModelMappings не работают. Это создаст ваше сопоставление со значениями, которые являются текущими значениями свойств при создании объекта сопоставления. Обычно вы создаете две функции: setLegacyToNewModel() и getLegacyFromNewModel(), которые содержат инструкции switch в имени свойства, если вы не хотите использовать индексацию имени свойства в классе TypeScript. –

ответ

1

Я пытаюсь понять, что вы пытаетесь выполнить здесь, поэтому, пожалуйста, поправьте меня, если я ошибаюсь.

Не могли бы вы использовать геттеры и сеттеры на одной модели для соответствия свойствам имен полей для обеих баз данных?

class Patient { 
    public firstName: string; 
    public lastName: string; 
    public dateOfBirth: Date; 

    get "First Name"(): string { 
     return this.firstName; 
    } 
    get "Family Name"(): string { 
     return this.familyName; 
    } 
    get "DOB"(): Date { 
     return this.dateOfBirth; 
    } 

    set "First Name" (value: string) { 
     this.firstName = value; 
    } 
    set "Family Name" (value: string) { 
     this.familyName = value; 
    } 
    set "DOB" (value: Date) { 
     this.dateOfBirth = value; 
    } 
} 
+0

Благодарю вас! Я не знал о синтаксисе get и set в TypScript. Это выглядит великолепно. – vaughan

Смежные вопросы