中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

用數據庫生成的ID會生成什么問題

發布時間:2021-10-29 20:22:05 來源:億速云 閱讀:141 作者:iii 欄目:web開發

這篇文章主要講解了“用數據庫生成的ID會生成什么問題”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“用數據庫生成的ID會生成什么問題”吧!

用數據庫生成應用ID會造成什么問題?

首先,最大的問題是你把應用程序中一個極其重要的部分授權給第三方軟件,在授權第三方責任時,你已經失去了對這個應用程序的掌控權。

其次,在設計實體類時,你可能會使用不恰當的方法,因為你想讓它與一個永久框架更兼容,比如說C#  .NET中的實體框架。初級程序員犯的最嚴重的一個錯誤就是使用public Id setter方法來設置ID。

用數據庫生成的ID會生成什么問題

第三,你突然要依靠第三方來給實體提供ID,這會把原本不復雜的單元測試變得復雜。假設你已經發現使用public ID  setter本質上是一個嚴重的錯誤,而你又不想通過調用代碼來設置ID。創建的類看起來會如下所示:

用數據庫生成的ID會生成什么問題

你選擇的ORM仍然可以通過反射來設置id字段。要知道,有反射存在就沒有什么是真正安全的。

但該如何對此進行單元測試?實例化時將id字段設置為0。實例化多個TerribleBook會出現身份沖突情況,因為現在不止一個TerribleBook具有相同的ID,即便他們代表兩個不同的實體。

如何生成更合適的ID并追回授權?

方法其實非常簡單,看下面的代碼:

用數據庫生成的ID會生成什么問題

不是人人都能注意到TerribleBook到FixedBook之間的轉變,所以請認真閱讀這段代碼。

首先,ID由整數變成字符串,這樣可以更好地實現伸縮性,但一定要限制數據庫中字段的長度。永遠不要對已知長度的字段使用  VARCHAR(MAX)——它會占用內存。

然后將構造函數設為私有,并使用靜態工廠方法實例化新對象。這樣可以從調用者中抽象出實例化邏輯,甚至為我們提供了使用多態的機會——我們可能想返回某個Null對象而不是拋出。

注意,雖仍然把id當作構造函數參數,但是ID的生成和提供是由我們來決定的(在第18行),而不是數據庫。

Guid.NewGuid()。ToString("D")只能確保獲得連字符格式的GUID。筆者喜歡用GUID,但是你可以自由構建自己的ID,無論哪種ID都可以滿足你的業務和應用程序需求。

感謝各位的閱讀,以上就是“用數據庫生成的ID會生成什么問題”的內容了,經過本文的學習后,相信大家對用數據庫生成的ID會生成什么問題這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

郓城县| 宁明县| 如东县| 九台市| 永春县| 安平县| 沙雅县| 崇州市| 闸北区| 镇原县| 安溪县| 合阳县| 衡阳市| 西宁市| 淮安市| 三原县| 扎赉特旗| 甘谷县| 伊金霍洛旗| 宕昌县| 东乌珠穆沁旗| 思茅市| 哈密市| 五寨县| 阿拉善左旗| 阿坝县| 乐至县| 瑞丽市| 忻城县| 遂平县| 枣庄市| 余干县| 博野县| 固原市| 福鼎市| 太原市| 康定县| 淮北市| 竹北市| 湘潭县| 乡城县|