對於構建的Web應用程序的前端,我使用RESTful Web服務來獲取我的數據。這樣的調用和響應可能如下所示:JavaScript映射來自外部REST API的JSON數據
// GET api.example.com/persons/3
{
p_id: 3,
p_fn: 'Jon',
p_ln: 'Smith',
p_addr: {
str: 'Baker Street',
city: 'London',
cntry: 'GB'
},
// and more stuff...
}
我並不需要所有這些數據在我的應用程序,所以我決定把它們映射到我自己的類。這也給了重命名和結構調整的屬性,從外部API解耦的好處,並添加一些方法的能力:
class Person {
name: {
first: string,
last: string
};
country: string;
getFullName(): string {
return this.name.first + ' ' + this.name.last;
}
}
本例使用打字稿,但也可以使用ES6類創建
這很好,直到我想改變這個對象的屬性。
例如Person
的國家必須改變,因爲他搬到了法國。而且他的名字被編輯,因爲有一個錯誤:
person.country = 'FR'
person.name.first = 'John'
現在的變化必須被送回外部服務:
// PUT api.example.com/persons/3
{
p_id: 3,
p_fn: 'John',
p_ln: 'Smith',
p_addr: {
str: 'Baker Street',
city: 'London',
cntry: 'FR' // This is where my example falls apart
},
// and more stuff...
}
但如果沒有屬性被更改,呼叫切不可完全可以執行,所以必須有某種檢測。
所以基本上我不得不在這些本地實例和類DTO對象之間來回翻譯。什麼是設置這個最好的方法?
有沒有這樣做的標準方式?我聽說過一些關於ORM或持久化模式的東西,但是這些適用於JavaScript的是什麼?有沒有最好的做法來做這個客戶端?
這個toJSON方法怎麼樣?這些更改需要與舊的JSON合併,舊的JSON必須存儲在某個地方。將它存儲在課堂上可能不是非常有效。 –