簡體   English   中英

不確定使用MVC設計模式

[英]Unsure about using the MVC design pattern

我正在嘗試為我的項目使用MVC設計模式,但是我不確定如何將程序解耦到類中。 我程序的第一部分是一個登錄屏幕,要求用戶輸入用戶名和密碼,以及一個開始按鈕,用於檢查詳細信息,還有一個按鈕可以轉到頁面中,您可以在其中添加新用戶。 所以我在考慮我的MVC設計:

loginpanelView:僅帶有文本框,標簽,按鈕等的GUI

loginpanelController:-在此處實現“開始”按鈕的動作偵聽器,並引用方法checkLogin-在此處實現“添加用戶”按鈕的動作偵聽器,並參考切換面板的方法

loginModel:-定義檢查登錄的實際方法

switchpanelModel:-定義創建卡布局系統並切換面板的方法

我的理解是,控制器只是對需要完成的工作進行了非常籠統的參考,即用戶想要發生的事情,然后模型定義了如何處理此問題的確切方法? 有人介意驗證/糾正我的理解嗎? 我已經閱讀了很多有關這種設計模式的信息,但是不幸的是,我仍然感覺不太清楚。 任何幫助將非常感激!

ps抱歉! 我忘了說我在用Java編程

有了這樣一個基本的“功能設計”,很難為您提供准確的幫助,但是您可能想更多地考慮想要的全局。

  • 用戶模型-用戶的數據庫模型。 包含“檢查登錄”方法
  • 登錄頁面視圖-表單,布局等
  • 登錄控制器-從表單中獲取內容,嘗試使用用戶對象中的方法登錄某人,並創建該用戶對象

頁面視圖/控制器可以分為幾個子部分,但這可能不是一個好的開始。

在我看來,LoginModel和SwitchPaneModel根本不是模型。 模型就是您存儲在某處的東西。 因此,您將擁有UserModel和PaneModel。 您的控制器將實現switchPane方法和login方法。 在一些單獨的類中將此方法解耦是一個好主意,有許多方法可以執行此任務。 但我強烈建議您找到現成的解決方案。 不要發明自行車。

有時可以從依賴關系的角度來考慮MVC。

該模型代表您的應用程序執行的操作。 它不依賴任何東西。 這就是使您的應用程序獨特的原因。

該視圖向用戶顯示信息。 此信息來自模型。 因此,視圖依賴於模型。

控制器的功能是接受用戶的輸入,將該請求分派給適當的模型功能,並且(通常)接受返回值並將其提供給視圖渲染。 因此,控制器通常非常緊密地耦合到它所服務的視圖。 它還依賴於模型。

在這種情況下,模型就是您的身份驗證方案。 (實際上,這並不是模型的全部內容,而是應用程序中的切入點,您的總體模型類似於“流程付款”,“生成報告”,“創建小部件的請求”等)。

您有兩個視圖,一個用於輸入認證信息,第二個用於認證成功的時間。 第一個實際上沒有任何模型信息,僅用於收集輸入(但是其設計將基於身份驗證模型所需的內容,因此這里仍然存在依賴性)。 無疑,第二個將顯示應用程序提供的可用功能列表或顯示登錄頁面等。

調解這些交互作用是控制者的責任。 因此,從第一個視圖發送的信息由控制器接收,分派給身份驗證模型,身份驗證成功或失敗,然后控制器根據結果選擇適當的視圖進行呈現。

這里是一個很好的起點。 這是稱為被動視圖的MVC的特例。 第一個重要的想法是視圖和模型根本不相互通信。 該視圖僅告訴控制器有關事件的信息,並且控制器同時操縱視圖和模型。 控制器甚至可以創建新的控制器和視圖(例如用於復雜的模態對話框)。 最后,該模型無法與任何人通信!

因此,您有一個正確的想法:您的loginpanelController偵聽來自loginpanelView的按鈕事件,然后在模型中調用正確的方法來設置數據並進行驗證。

我認為您可能遇到問題的一個地方是switchpanelModel。 我認為您不需要這個。 如果您的loginpanelView是其中包含卡片的視圖,則您的loginpanelController應該是切換卡片的視圖。

我認為模型應該限於使用自己的數據的方法,但任何地方都不能引用任何GUI元素。 模型不驅動程序。 控制器做。

與其以“定義”方法的方式思考,不如以封裝的內容進行思考。

例如, 寬松地講 ,在MVC中,視圖主要封裝程序的用戶界面(登錄表單),模型則封裝域邏輯的一部分(密碼驗證),而控制器則封裝將視圖與模型連接的邏輯(這取決於MVC架構的變化)。 控制器通常在某種程度上與視圖耦合(特別是如果您開始添加公開的特定ActionListener等),但是模型應該是可重用/可互換的(更改驗證方式並不意味着您必須更改使用它的任何視圖/控制器)

暫無
暫無

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

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