2014-06-12 75 views
1

我想正確理解分層體系結構的概念。我認爲我理解了大部分的概念,但是有一兩件事對我來說還是不清楚......瞭解域層和基礎設施層之間的交互

所以我理解每個單獨層的目的:表示層是用於UI和用戶交互的,應用層座標應用程序邏輯和域對象,域層是所有業務邏輯去的地方,基礎設施層用於持久性和訪問外部服務,如網絡能力等。

我知道每層只應該依賴於下面的圖層它,並且這些圖層應該用接口分開。我很難理解,雖然是領域層和基礎設施層之間的交互...

我正在開發一個數據庫爲中心的桌面應用程序。我最初的做法是將所有信息從數據庫中提取到內存域模型中。然後,該模型將在應用程序的持續時間內存在,然後只有在用戶保存後纔會保留到數據庫。雖然我對這種方法有懷疑,但從我所讀的內容來看,似乎我只應根據需要從數據庫中提取數據。換句話說,將信息拉入對象中,編輯對象,並在完成後將對象推回到數據庫中。但是,讓我困惑的是,一旦他們離開數據庫,這些對象就會從狀態中斷開。所以我們可以說我從數據庫中提取對象A並編輯它。在將其提交回數據庫之前,應用程序的另一部分還將對象A從數據庫中提取出來。同樣的兩個對象現在生活在我的領域層,具有不同的參考和不同的狀態。這對我來說就像是一場噩夢。我錯過了什麼嗎?我是否應該只允許一次交易以避免此問題?

我的初始方法是將所有數據拉入內存模型是否錯誤?我的應用程序可能有多達10000條記錄,所以我想這可能會導致內存問題?

附註:我在這個階段沒有使用任何ORM。

任何幫助或見解將不勝感激!

回答

1

基礎設施層是用於持久性和訪問外部服務,例如網絡能力等

持久性層是用於持久性和基礎設施層通常是一個交叉層(即,其垂直地跨越不同跨越圖層),其中可能包括日誌記錄或您提到的內容。

您對數據更新的擔憂是一個經典的併發問題,並非特定於分層架構。有許多解決方案,典型的解決方案是optimistic concurrency control,它會在用新值更新之前檢查舊值是否未被修改。類似的方法是使用自動增量值而不是舊值。