第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

數(shù)據(jù)庫表是否應(yīng)使用 API 中定義的相同結(jié)構(gòu)?

數(shù)據(jù)庫表是否應(yīng)使用 API 中定義的相同結(jié)構(gòu)?

Go
溫溫醬 2022-08-24 15:49:34
假設(shè)我有一個gpc服務(wù),并且有一個API可以創(chuàng)建新用戶,如下所示: service UserService{  rpc CreateUser(CreateUserRequest) returns (CreateUserResponse);}message User {  string userId = 1;  string firstName = 2;  string lastName = 3;  string password = 4;}message CreateUserRequest {  user User = 1;}message CreateUserResponse {  user User = 1;}該服務(wù)將用戶數(shù)據(jù)保存到PostgresDb中的users_table中,如下所示:user1 := NewUser() // instantiating the User object as defined in the proto file.// user2 := NewMyUser() // instantiating the MyUser object as defined separately in the service.result := s.db.Table(UsersTable).Create(user1) 此外,我正在使用proto緩沖區(qū)根據(jù)上面的api proto文件生成服務(wù)器和客戶端代碼。我的問題是:在實例化用戶對象時,用戶應(yīng)該是在原型定義中定義的生成的用戶結(jié)構(gòu)嗎?或者我應(yīng)該像這樣將另一個用戶結(jié)構(gòu)定義為專用于postgresDb的服務(wù)中的模型?struct MyUser {      userId string      firstName string       lastName  string       password string       createdAtMs int64 // an extra field not available in the api}后續(xù)問題:每種方法的優(yōu)缺點是什么?它的最佳設(shè)計原則是什么?
查看完整描述

1 回答

?
眼眸繁星

TA貢獻1873條經(jīng)驗 獲得超9個贊

這兩種方式在實踐中都會發(fā)生。這可能主要取決于您的服務(wù)有多少邏輯;邏輯很少的服務(wù)(例如,圍繞數(shù)據(jù)庫的小型包裝器)更有可能將原型直接存儲在數(shù)據(jù)庫中。具有相似但略有不同的原型是很常見的,其中數(shù)據(jù)在通過系統(tǒng)時在每一步都被復制。

如果您將原型直接存儲在數(shù)據(jù)庫中,然后意識到您犯了一個錯誤,則可以通過創(chuàng)建一個與舊消息兼容的新消息(一個新名稱,但所有相同的字段具有相同的ID)來“分叉”原型消息。您將代碼遷移到新消息(將舊消息保留在服務(wù)中)的痛苦,但是使用此方法,您不必在交換到新消息類型之前重新編碼數(shù)據(jù)庫中的所有數(shù)據(jù)。

如果選擇在數(shù)據(jù)庫中使用相同的消息,則應(yīng)確保在存儲未知字段之前將其刪除。否則,當您將來添加新字段時,您可能會發(fā)現(xiàn)已損壞/惡意的客戶端已在該字段中存儲了數(shù)據(jù)。


查看完整回答
反對 回復 2022-08-24
  • 1 回答
  • 0 關(guān)注
  • 107 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號