我很好奇其他人如何使用底層關係數據庫創建他們的AngularJS視圖模型?我和我的團隊在決定是否應該在服務器端或客戶端進行對象連接時遇到問題。在服務器或客戶端上創建AngularJS View-Model?
例如,我們在服務器上有幾個型號,如Author
,Book
和BookComment
。在第一個示例中,只有一個端點可以像/api/author/:id
那樣獲得Author
,並且它在服務器上「打包」整個視圖模型。第二個示例中,每個對象都有自己的RESTful API端點,如/api/authors/:id
,api/books/:id
和/api/bookcomments/:id
。
一個Author
可以有一個或多個Book
對象和一個Book
可以有一個或多個BookComment
對象。
現在讓我們來比較2種情況:
服務器端加入
我們讓服務器加入基於關外鍵的對象,並與像
作者物體結束
{
'id':1,
'firstName':'John',
'lastName':'Steinbeck',
'books':[{
'id':123,
'title': 'Grapes of Wrath',
'author':1,
'comments':[{
'id':555,
'content':'This is a great book!',
'book':123
}]
}]
}
這將得到所有的neede d數據和對象以正確呈現視圖。然後,問題就變成了管理原子級別的評論和書籍,所以如果用戶只編輯評論,我們不想保存整個對象,而只需更新BookComment
對象。這需要拔出物體並用角狀物$resource
或類似的東西來引導它們。
客戶端加入
我們要求的車型單獨,然後加入他們的客戶端上:
作者
{
'id':1,
'firstName':'John',
'lastName':'Steinbeck',
'books':[]
}
書
{
'id':123,
'title': 'Grapes of Wrath',
'author':1,
'comments':[]
}
BookComment
{
'id':555,
'content':'This is a great book!',
'book':123
}
如果我拉下對象使用RESTful接口列表,然後我可以使用的東西加入他們喜歡
//Get the author
var author = Author.get();
//Join the books that were authored by this author
author.books = filterFilter(books, {author:author.id});
// Iterate each book and filter the comments by book ID
angular.forEach(books, function(book){
book.comments = filterFilter(comments, {book:book.id});
});
這些都具有自己的優點和缺點。第一個原因很難自動管理這些對象,這迫使您POST大型對象並使後端處理更新SQL數據庫。第二個向客戶端添加更多工作,因爲您需要拉下大型數據集,然後過濾/將它們連接到其他模型上。
是否還有另一個選項,我還沒有遇到或者是這兩種方式之一被認爲是最佳實踐?