簡體   English   中英

model 類中的虛擬屬性如何違反持久性無知原則?

[英]How could virtual properties in model classes violate the persistence ignorance principle?

我剛剛閱讀(修訂)一些架構原則(如此處所述 https://docs.microsoft.com/en-us/dotnet/architecture/modern-web-apps-azure/architectural-principles )並感到有點困惑關於persistence ignorance原則有一個這樣的違規示例:

 Properties requiring virtual keyword

所以我不清楚為什么這樣的要求會違反持久性無知原則。 假設我們的 model 類僅在 C# 中,由 .NET 編譯器編譯。 要加載 model 實例,只需正常創建 class 實例(所有屬性都從相應的持久數據初始化,例如:數據記錄)。 要保存它,只需從 model 實例讀取值並將其放回持久存儲(任何類型)。

實際上Entity Framework確實需要啟用一些很酷的功能,例如延遲加載,......而且我確實看到 EF 在支持各種持久存儲(數據庫)方面做得很好,據我所知,這應該與所謂a violation of the persistence ignorance principle

你能給我一些真實的例子來證明requiring virtual properties可能違反持久性無知原則嗎? 如果有的話,是不是有時我們不能只遵守所有的原則,我們可能不得不在遵循好的原則和擁有好的特性之間進行權衡(比如 EF?

它違反持久性無知原則的原因很簡單:您必須使屬性為virtual才能使 EF 滿意,因此您將業務代碼二重奏更改為持久性問題。 除了直接違反原則之外,使用覆蓋 class 成員的 EF 功能會更改 class 的類型,因此,例如,在您的Equals實現中,您不能再使用GetType()來比較兩個實例,因為實際object 的類型是由 EF 在運行時生成的,因此,您再次根據持久性問題開始更改域邏輯。 附帶說明一下,我還建議不要在大多數情況下使用 EF 的延遲加載,因為它只能同步工作,阻塞當前線程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM