簡介
現在,市場是緊縮的。框架可以節省設計和開發階段的時間。IDE可以使得我們更容易的開發用戶接口。標准的GUI應用程序用不同的面板布局來定義GUI,已成為一種根本的模式而存在。基於這個模式,考慮使用框架來提高執行速度,達到更高的並行處理程度,協調更寬松的開發方式。我們在這裡就要用JAVA SWING應用程序來描敘這麼一個框架。
簡單的應用程序-圖書館管理系統
我們下面來討論一個簡單的圖書館管理系統,用來理解基於XML的GUI框架。
上面的流程圖定義了圖書館用戶接口的設計。主目錄,會員登錄,用戶注冊和書籍檢索,這些都是應用程序中存在的面板(panel)。從流程圖可以看出,在應用程序中可能的處理路徑有下面幾種:
主目錄->用戶注冊->書籍檢索
主目錄->會員登錄->書籍檢索
原則
任何時候顯示的面板依賴於先前面板的輸出內容。因此,需要設計一個普通的控制器作為整個框架的窗體(form),它提供面板用來做必要的輸入,並處理面板中期待返回的輸出內容。這些面板都實現了XSFPanel接口,該接口中有個execute()方法用來將表單中的輸入內容存入一個HashMap中,並從另一個HashMap返回輸出內容。該框架的控制器處理使用HashMap返回的輸出內容,並隨時判斷應該顯示哪個面板。
public interface XSFPanel extends JPanel
{
public HashMap execute(HashMap inputs);
. . .
}
控制器和XML流定義
流控制器和一個簡單的定義著用戶接口的XML相關聯。這個XML必須基於每個面板輸入的內容和料想會輸出的內容而定義。我們這裡討論的這個簡單的程序是基於下面的XML工作的。
<XFSFramework>
<XFSPanels>
<XFSPanel name="Home" class="library.Home">
<inputs/>
<outputs>
<output variable="userOption"/>
</outputs>
</XFSPanel>
<XFSPanel name="MemberLogin" class="library.MemberLogin">
<inputs/>
<outputs>
<output variable="userName"/>
<output variable="password"/>
</outputs>
</XFSPanel>
<XFSPanel name="Registration" class="library.UserRegistration">
<inputs/>
<outputs>
<output variable="userName"/>
<output variable="password"/>
<output variable="emailId"/>
<output variable="address"/>
</outputs>
</XFSPanel>
<XFSPanel name="RegistrationPreview" class="library.UserPreview">
<inputs>
<input variable="userName"/>
<input variable="emailId"/>
<input variable="address"/>
</inputs>
<outputs/>
</XFSPanel>
<XFSPanel name="searchBook" class="library.searchBook">
<inputs/>
<outputs>
<output variable="criterion"/>
<output variable="searchValue"/>
</outputs>
</XFSPanel>
</XFSPanels>
<XFSPanelFlow>
<step id="s1" from="Home" to="MemberLogin">
<conditions>
<condition variable="userOption" value="login"/>
</conditions>
</step>
<step id="s2" from="Home" to="Registration">
<conditions>
<condition variable="userOption" value="newRegistration"/>
</conditions>
</step>
<step id="s3" from="Registration" to="RegistrationPreview">
<conditions/>
</step>
<step id="s4" from="MemberLogin" to="searchBook">
<conditions>
<condition variable="controller_loginResult" value="success"/>
</conditions>
</step>
<step id="s5" from="RegistrationPreview" to="MemberLogin">
<conditions>
<condition variable="controller_accountCreationResult" value="success"/>
</conditions>
</step>
</XFSPanelFlow>
</XFSFramework>
注意:這個XML僅僅被用來描敘框架。
在上面的XML中,提及到所有實現了XFSPanel接口的面板。從一個面板出來的流信息到另一個面板。
並發處理如何實現
在這個使用框架開發的程序中,面板的開發者可以將經歷集中到如何表達信息而不用擔心用戶接口的流。一旦XML流被定義,許多開發者都能夠同時並發的在應用程序的各個不同面板上進行工作。
如何協調更寬松的開發方式
這個框架的一個重要特點是,新的面板將可以隨時被添加進程序中。現有面板的輸出也可以僅僅通過修改XML而改變。
在我們的程序中,如果登錄的用戶是一個管理員,我們需要提供另一個用戶選項(user option),用來通過主目錄查看管理者的任務面板。這個只需要加上下面額外的代碼即可實現。
以下代碼應該添加到XFSPanels中:
<XFSPanel name="AdminTasks" class="library.AdminTasks">
<inputs/>
<outputs>
<output variable="adminTaskId"/>
</outputs>
</XFSPanel>
以下代碼應該添加到XFSPanelFlow中:
<step id="s6" from="MemberLogin" to="AdminTasks">
<conditions>
<condition variable="controller_isAdmin" value="true"/>
</conditions>
</step>
這個框架工作在XML流上,當它被修改時,流自動的被修改。能夠注意到,一旦XML流改變了,開發者可以集中經歷開發管理者的任務面板,修改主目錄這些工作。而不用擔心面板的流,因為它是被框架的控制器關心的。
結論
UI應用的需求經常在改變,這個框架可以幫助你很容易的對付這些改變。盡管JAVA是基於框架的,但本文談到的這個模式能夠應用在任何語言和開發環境中的應用中。SWING應用框架只解釋了GUI應用中的模式。