日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Shadow Properties之美(二)【Microsoft Entity Framework Core随笔】

發布時間:2023/12/4 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Shadow Properties之美(二)【Microsoft Entity Framework Core随笔】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

接著上一篇Shadow Properties之美(一),我們來繼續舉一個有點啰嗦的栗子。
先看簡單需求:某HR系統,需要記錄員工資料。需要記錄的資料有:

  • 員工號(規則:分公司所在城市拼音首字母,加上三位的順序數字,例如 GZ001,CD001,SH007等;對于每個員工有且僅有一個員工號,且不會存在同一員工號屬于不同員工的情況);

  • 姓;

  • 名;

  • 最后一次入職日期(有些員工可能會有來來回回超過一次的入職離職再入職,保存最后一次就好)

  • 其他。。。
    在繼續討論之前,會用到有關 邏輯設計 和 物理設計 的概念,它們兩者的區別,建議可以先閱讀一下?https://it.toolbox.com/blogs/timbryce/logical-vs-physical-design-do-you-know-the-difference-050306?,然后我們再繼續。
    針對這個需求,我們簡單地會有以下這樣邏輯設計的類:

    其中EmployeeCode就是 Unique Identifier (唯一標識符)
    (本篇的程序,可以在這里下載:https://github.com/kentliu2007/EFCoreDemo/tree/master/ShadowProperty?用的是VS 2017)
    并且習慣性地會有按照 Default大法,有以下的數據表以及程序:

  • 數據表:



    雖然default大法好,而且還可以借口 “用自增長ID來做主鍵,可以加快數據庫做join的時候的速度”,所以才沒有用 EmployeeCode來做主鍵(雖然這個才是Unique Identifier)。。。但是我們還是需要做一些不是完全default的改動,仔細看上面綠色標識的內容,請留意clustered index以及unique key。

  • 演示數據:

  • 然后我們還有比較傳統的基于EF6的WebApi:








    圖有點多,但是因為都按照 default 大法 來搗弄的。一切都很簡單很溜,對吧?

不過等等,畫風有點不對,負責BDD的同事(不論是SME/BA/QC)可能會跳起來,如果我們要查詢員工號是 SH007 的員工,為什么是?http://localhost:62021/api/Employees/3??如果換個DB,手動操作一下,或者測試并發量大的前提下,說不定要?http://localhost:62021/api/Employees/250?才是 SH007的數據了。如果換成是用GUID來做ID字段的,就可能會有類似這樣的:http://localhost:62021/api/Employees/85a13f20-2d3e-4a21-807d-c64f5a55a626?,這個又是什么鬼?其他系統call這個api的時候,或者BDD的案例描述是:查詢員工號是SH007的員工的資料。。。但是我怎么知道你這個DB里面,ID是什么數字(如果是GUID的話,鬼知道又是個什么冰糖葫蘆串)?麻煩請說人話好不好?這種邏輯設計里面本來就沒有的,由于物理設計才出現的東西,DataAccess層,請你自己留著和數據庫兩個慢慢玩,不要漏出來給其他層好不好?
還有,倆Employee的類,有點拖沓了吧?

好吧,為了保持跟邏輯層一致,并且不想要兩個employee類,繼續使用EF6,我們會有第二個版本:






這下畫風正常了。不過一堆模塊都需要引用或者基于 DataAccess 模塊;還有雖然只有一個employee類了,但是還要加上一些其他internal的屬性。。。總感覺還是做得不夠優雅(混了牛奶和糖的美式啊)。

現在有了EF Core的Shadow Property,我們可以把這個做得很優雅(鼓掌)。Shadow Property就是讓我們可以保持 邏輯設計層 美式的純正,然后讓 DataAccess層 可以處理和消化掉 物理設計層 特有的元素:






看,一切都很 “美式” 的優雅,不存在騙奶騙糖的感覺:從Component Diagram來看,各個模塊都引用著正確的邏輯設計模塊;DataAccess模塊沒有需要多產生一個拖沓的EF類;外部系統以及人機對話的時候,都是針對邏輯設計來交談,且說的都是人話。

本篇圖有點多,建議結合下載的源代碼來閱讀本文。

希望通過上述兩個栗子,讓大家能夠感受到Shadow Property的美,且能在工作中更靈活地把它用起來。
謝謝能耐著性子看到這里的大神們。請溫柔一點吐槽哈。

下一篇,我計劃向大家介紹一下EF Core的一個“幕后英雄” -- Backing Fields。敬請期待噢。。。

原文地址:https://www.cnblogs.com/fatkent/p/10333487.html

.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com


總結

以上是生活随笔為你收集整理的Shadow Properties之美(二)【Microsoft Entity Framework Core随笔】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。