問題的兩個部分:規範化表併發檢查(ACID)
1號:什麼是創建引用其他對象的對象模型,最好的辦法時,一些屬性/屬性引用的對象並不總是必要的?
試想一下,如果你有兩個對象:PERSON和BUSINESS
Person
+ PersonID
+ Name
+ Age
+ Sex
+ Skill
+ Business *
Business
+ BusinessID
+ Name
+ Address
+ CorporateVision (this is large)
在上面的例子:一個PERSON具有作爲其當前僱主的BUSINESS參考。
在數據庫中,我會爲每個對象有兩個表。在代碼中,使用MVC體系結構模式時,每個對象都有兩個類。該數據庫將具有BUSINESS之間的外鍵關係 - >PERSON,而在代碼PERSON對象將具有保持到BUSINESS對象的引用的成員變量。
現在讓我們說,我想枚舉的人士集合,並找出那些針對特定公司工作的總人數(基於BUSINESS。名稱)。
不使用MVC,我可以創建一個函數來查詢數據庫並獲得一個計數。簡單而有效。
在MVC中,我需要實例每PERSON對象,這反過來,實例化一個BUSINESS對象引用(如果不是已經做好了...... BusinessFactory將檢查集合第一)。此外,它必須拉業務。 CorporateVision從數據庫中爲每個對象。而且由於這些業務大部分都是媒體營銷公司,他們大部分的企業願景都是大文本塊。因此,當我們需要的只是業務名稱時,從數據庫中讀取CorporateVision是非常不必要的。
我可以有改變PERSON對象的代碼來解決這個問題:所以,現在當我創建我的PERSON對象
Person
+ PersonID
+ Name
+ Age
+ Sex
+ Skill
+ BusinessID
+ BusinessName
,我做BUSINESS一個JOIN和緩存名稱。現在,我可以快速有效地獲取BusinessName ...並且通過對ID進行查找,我仍然可以根據需要獲取完整的BUSINESS對象。但是我只是對模型進行了非規範化......而我剛剛介紹了一個新問題......並提出了一個新問題。
Number 2:MVC如何處理多用戶數據庫的併發性?
可以說,雖然我的客戶端應用程序正在枚舉(使用上面提到的查找所有人爲特定業務工作的枚舉),但另一個用戶合併了兩個BUSINESS對象。
現在我的內存中收集是錯誤的,因爲所有的BusinessName緩存都是陳舊的。如果我剛離開PERSON,情況也會如此。 業務作爲業務對象編號:業務對象將陳舊。
總結:我覺得使用MVC我失去了數據檢索效率以及我的應用程序的ACIDness的損失。或者我使用MVC錯了?
我想我可能已經找到了答案:[對象 - 關係阻抗不匹配](http://en.wikipedia.org/wiki/Object-relational_impedance_mismatch) –