2010-01-20 81 views
3

我正在開發一個Java應用程序,在我的GUI中,我有幾個JPanels與他們的很多設置,這將是查看。在這幾個JPanels的背景中,只有一個型號。通常情況下,我會觀察模式JPanels模型可以觀察視圖嗎?

我只是想知道,是不是很好的做法,從模式觀察查看?因爲,用戶改變查看,而這種變化必須影響我模式。或者我在這裏錯過了一些重要的原則?謝謝您的幫助..

回答

6

我認爲它的偉大,你都在質疑這一點。

哪一部分你缺少能夠幫助是控制器。

查看樣例http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller

基本上是一個控制器是模型和視圖之間的調停。它「控制」應用程序。您的視圖應該知道的唯一一件事是傳遞給它的數據以及如何顯示它。你的模型唯一應該知道的就是數據。 Controller將這兩者聯繫在一起,幷包含作用於數據的業務邏輯並準備將其傳遞給視圖。

使用這種設計得到的是鬆散耦合且易於測試的應用程序。它真的是優雅恕我直言。

乾杯,

邁克

+0

我會研究一下,謝謝。 – 2010-01-20 00:55:47

+1

我最喜歡的MVC圖:http://java.sun.com/blueprints/patterns/images/mvc-structure-generic.gif – trashgod 2010-01-20 01:55:31

2

這可能會造成不必要的模型和視圖之間的結合。但是也要考慮一下你可以進入的無限循環。

如果模型也被視圖以外的東西更新,或許是一個Web服務?然後,通過Web服務對模型進行更改將導致視圖中的更改,因爲視圖將會觀察模型。而且視圖的變化也會引發模型的變化,因爲模型也在觀察視圖。在這裏看到遞歸?繞過它並不難,但會導致一個非常糟糕和不可維護的設計。

+0

是的,這是無限的循環讓我問這個問題。事情越來越清晰了,謝謝.. – 2010-01-20 01:03:04

1

爲了將您的模型和視圖結合在一起,已經提出了一種解決方案,即添加一個控制器,以便實現全套模型視圖控制器組件。這引入了所有三個組件之間非常緊密的耦合,從單元測試的角度來看,這並不是真正需要的。

另一種方法是考慮Model-View-Presenter pattern。 Presenter將是Model和View之間的中介,並將根據來自View的任何輸入更新Model,並且還將負責根據Model中的任何更改更新視圖。對於你的單元測試,你可以用一個模擬視圖來替代測試模型,或者使用一個模擬模型來測試視圖(或者模擬兩者來測試演示者)。

+0

我同意,MVP非常乾淨,只有一種解釋。 – Anurag 2010-01-20 01:30:17

相關問題