2013-10-02 112 views
1

我有一個遺留數據庫,我想通過全新的API公開。使用Typescript映射數據庫模式

我需要將模型的字段名稱從遺留數據庫映射到我的新模型類。

我想以類型安全的方式做到這一點,而不是僅僅使用容易出錯的字符串映射字典。

// 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得到一個警告,如果有一個問題。

但是我需要能夠在兩個模型之間來回映射。使用引用雖然意味着我不能從遺留數據庫映射到新數據庫。

我在Node.js中使用TypeScript。

我應該看的任何其他方法?

+0

您是指從新數據庫返回到舊數據庫?這是一個JavaScript問題,與TypeScript無關。您的映射需要雙向,但JavaScript對象散列只有單向。因此,您必須在兩個方向上構建兩個映射詞典,或者對某個方向使用屬性搜索(可能是最少使用的一個)。一些JavaScript庫包含一個「反向對象」函數,它構建一個新對象,用屬性值切換屬性值 - 在這種情況下,您將創建一個映射,然後「反向」以獲取其他方向。 –

+0

另外,您的legacyToNewModelMappings不起作用。這將使用構建映射對象時作爲屬性當前值的值構建映射。如果您不想在TypeScript類上使用屬性名稱索引,通常會生成兩個函數setLegacyToNewModel()和getLegacyFromNewModel(),它們在屬性名稱上包含switch語句。 –

回答

1

我想了解你在這裏完成的任務,所以如果我錯了,請糾正我。

難道你不能在一個模型上使用getters和setter來匹配兩個數據庫的字段名稱的屬性嗎?

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

哇,謝謝你!我不知道在Typescript中獲取和設置語法。這看起來不錯。 – vaughan