2010-01-20 58 views
35

我將啓動一個Java項目來開發一個桌面應用程序。 什麼用作表示層模式(MVC,MVP,MVVM或....)?使用什麼? MVC,MVP或MVVM還是...?

...如果可能的話,有一些工作的小例子... :-)

+6

我覺得這個問題太含糊。 IME,每個人都說他們在做MVC,但他們在做什麼可能是其他人的一些變化。 – jsight 2010-01-20 21:34:31

回答

48

其實,你在尋找最終的職位是this answerthis answer從卡斯滕Lentzsch共同領導(的JGoodies數據名望)在Swing Frameworks and Best PracticesSwing Frameworks and Best Practices線程。

你好,

我已經寫的Swing應用了好幾年,很多人覺得 優雅。我教開發商在與Swing工作效率:如何 構建和組裝應用,如何綁定和驗證日期, 以及如何查找,設計,佈局和Swing中實施精心設計的 屏幕。

我想說沒有可用的在線Swing「最佳實踐」。我懷疑任何人都可以提供「最佳」做法,因爲 需要Swing開發人員和解決方案提供商 中關於方法的討論,技術上的效果很好,以及易於理解和使用的內容。另外,最佳實踐將解釋誰可以達到什麼結果質量,並且他們會描述生產時間和生產成本;但我永遠無法在線或在Swing書中找到這些信息 。

在我看來,缺乏良好的做法和信息如何構建 Swing應用程序是開發人員在從 Swing開始時遇到的最大障礙。我曾與大多數開發人員都在尋找設計, 實施佈局,建築板材,結合數據,處理事件, 和安排不同的部分代碼和代碼層慢。和許多Swing 我見過的應用程序吸吮;除了他們糟糕的視覺設計外,他們難以理解,甚至很小的變化都會花費很多。通常 開發商根本不知道往哪裏放什麼代碼?如何分離 關注?如何配合的東西放在一起?如何與操作工作?如何 推出一個應用程序?以及如何存儲和恢復UI狀態?大多數 開發人員缺乏遵循的準則。

但我發現一般開發人員可以在Swing中很好地工作,如果 只能在3到10天內完成。幾乎所有的 問題都可以回答或代碼,圖書館, 應用架構,模式,一般的編程實踐, 精心設計的例子,教程等我教Swing開發 的過程,是一個3圍繞構建解決-Tier體系結構,它分離了 域,工具和表示層,並且基於高效的 佈局系統。儘管大多數部件都是以編程方式完成的 開發人員迅速獲得結果,代碼和視覺設計 變得非常一致。這可以提高開發人員的生產力 - 很大程度上 - Swing工作佔項目工作的一小部分要小得多。

那麼你能做什麼?我強烈建議研究Martin Fowler的 草案,以獲取更多「企業應用架構模式」。 我發現這些模式在Swing和Swing 團隊中工作得很好 - 即使對於Swing和Swing 體系結構的新開發者也是如此。我首先選擇以下模式:「演示 模型」,「分離域」和「分離演示文稿」。我個人 支持模型 - 視圖 - 演示者模式(MVP)上的演示模型(Smalltalkers的應用程序模型), 。然而,MVP是一個真正的 和很好的研究替代。

福勒的模式可以與3客戶端架構 相結合,適合中等規模的Swing應用。它由域層,表示層和中介模型層組成,其中 。 我在我的數據綁定演示文稿中概述了這種架構。 基於MVP的應用程序也可以在這3個客戶端層中構建。

Swing應用程序的一個關鍵任務是數據綁定:如何將 域對象和域對象屬性連接到Swing組件。 基本上,您可以來回複製您的數據,或者從您的域對象到UI組件構建連接的 適配器。複製 的方法很容易理解,並且通常是那些新的Swing或數據綁定的 的首選;我會說這是一個不錯的選擇。另一方面,複製使同步視圖變得更加困難。 適配器鏈和自動或半自動更新可以大大減少將域數據 綁定到UI所需的代碼量。不足之處在於,這種方法很難理解 。正如你已經指出的那樣,Swing沒有提供很好的抽象 可用於可重複使用和靈活的模型,可用於綁定文本 字段;文檔界面不適用於通用數據 訪問。有跡象表明,提供的ValueModel 接口,這只是爲了增加一個通用的,強大的,靈活的 型號爲單值數據提供一些庫:字符串,布爾值,數字, 日期等

我m沒有意識到一本Swing書籍解釋了一個真正的Swing應用程序 開發過程。理想情況下,這樣一本書將結合上述模式, 體系結構和數據綁定技術, 描述如何在Swing中實現它。無論如何,有一個10年的 文檔的Smalltalk應用程序開發過程 正是這樣做。Oracle的JClient體系結構和文檔不是 ,完成後可能更容易閱讀,供Java開發人員閱讀。我提供 一個有關數據綁定呈現爲約福勒圖案,一個 3層架構和用於這些模式和 自動數據綁定Swing實現。我的綁定庫 的教程資源可能會幫助您使用適配器鏈和ValueModel接口。有關MVP模式的最佳文檔可以在Dolphin Smalltalk文檔的 中找到。

一旦你choosen你的架構和桌面模式設置,您應該 解決以下更基本的Swing任務:1)通過選擇一組專業的外觀&提高 外觀感覺你的目標平臺設定適當 , 2)選擇佈局系統,可以幫助你 快速建立良好的設計和一致的屏幕,3)選擇一個數據 驗證解決方案,以及4)解決方案,搶了一袋日常搖擺 任務。

有一對夫婦的,規定了一個Swing架構, 地址數據綁定和典型的搖擺任務,例如項目:Sun的 JDNC,Oracle的JClient中/ ADF,春節RCP,NetBeans平臺。我 提供基於對 開源的JGoodies庫,並增加了對所有公衆的JGoodies工具和演示解決方案和源 的袋子擺解決方案的商務套房。這些資料旨在解釋如何將上述所有問題聯繫在一起。

讓我補充有關所謂的「MVC」的框架我的標準的警告。 Swing 不使用MVC,它使用修改後的模式。 MVC經常被錯誤地引用和誤解 - 特別是在Swing的情況下。 另外,MVC適用於UI組件,不適用於應用程序。因此,我建議尋找反映 的概念,解決方案和庫,並使用Swing體系結構,而不是MVC。

MVC模式的發明者社區1993年左右引入的 應用模型(現稱爲呈現模型); MVP 稍後。在我看來,這兩種模式對於Swing比MVC更有用 。最近,將演示模型模式帶給更多觀衆的環境轉移到了新的 體系結構:「Pollock」。有興趣的讀者可以通過谷歌瞭解 與經常與 演示模型組合的適配器鏈有何不同。

最後但並非最不重要個人陳述。我可以使用 Swing比我之前使用的其他工具包或框架更好地工作;我可以用更少的代碼做更多的 ,代碼結構更好,它更容易維護,並且我可以很快得到結果。

希望這會有所幫助。最好的問候,卡斯滕Lentzsch共同領導

參考文獻:福勒的進一步模式 - http://martinfowler.com/eaaDev 數據綁定演示 - http://www.jgoodies.com/articles/ Smalltalk的應用開發過程 - http://www.cincom.com/downloads/pdf/AppDevGuide.pdf MVP模式 文檔 - http://www.object-arts.com/EducationCentre/Patterns/MVP.htm Sun的JDNC 項目主頁 - http://jdnc.dev.java.net/ Oracle的ADF常見問題 - http://www.oracle.com/technology/products/jdev/htdocs/905/adffaq_otn.html Spring RCP項目主頁 - http://www.springframework.org/spring-rcp.html NetBeans平臺主頁 - http://www.netbeans.org/products/platform/ JGoodies Swing Suite - http://www.jgoodies.com/products/index.html

如果你不認識Karsten和JGoodies,那麼相信我,這個人真的知道他在說什麼。我熱烈推薦仔細閱讀他的回答他發佈的材料作爲參考。更具體地說,一定要檢查他的桌面模式和數據綁定演示文稿。令人驚訝的是,我更喜歡old versionnew one

讓我引用了他對MVC幻燈片VS MVP:

  • 是,搖擺採用了擴展形式MVC的內部
  • MVC是組件,MVP是爲應用程序

然後從摘要:

但我不能解釋這個做的比卡斯滕一個更好的工作,我充其量只能套用他。所以只要讀他!

另外也許看看Desktop Java demos for learning(更準確地說是Scott Violet的answer)。

+1

這裏有一些更新的鏈接:http://forums.java.net/node/651182 http://www.java.net/node/661990 – 2011-04-10 03:55:48

+0

@Mishax已更新鏈接指向互聯網檔案(捐助讚賞)並添加了Karsten Lentzsch所說的話。一年的慶祝活動結束了:) – 2017-12-05 16:24:24

0

我也建議你使用谷歌找到更多的信息,因爲你的問題實在是模糊的。無論如何,既然你想用Java來做你的桌面應用程序,並且你可能會使用Swing,我只想指出Swing的設計考慮了MVC模式。無論如何,您可以使用一些額外的界面輕鬆修改爲MVP。

如果你不確定模式,我會建議使用MVC。你會發現更多的例子。

我的2美分。

1

你可以看看this article: Hello ZK MVVM。ZK支持MVP和MVVM,本文可能會提供您所選擇的一些見解 - 編程模型類似於鞦韆,認爲這是一個Web框架。

3

這裏是在Java中使用,以實現在同一屏幕三次比較3種GUI模式的文章:

Implementing event-driven GUI patterns using the ZK Java AJAX framework, Simon Massey, Sachin K Mahajan

由於不同的框架和語言對人們的感覺是MVP,MVC的細微變化, MVVM和MVVMP等等等等文章是由細心由Martin Fowler不是短期的手M__綽號這很容易爭論給出的長名稱來指代模式。

顯然ZK是一個Web或移動臺式機一樣的編程環境,但該模式同樣適用於鞦韆或其他胖客戶端框架。但是沒有一定的桌面環境,良好的數據綁定框架,它不是試圖MVVM非常可行。因此,在這個早期演示了「演示模式」模式被賦予綽號「MVB」爲模型 - 視圖 - 粘結劑作爲替代稱之爲「MVVM」:

Design Patterns in ZK: Java MVVM as Model-View-Binder, Simon Massey