2014-09-01 21 views
1

我正在開發Java Swing應用程序,我遵循MVC方法。我有一個控制器,然後我有我的模型和我的看法。以模塊化方式Java Swing + MVC模式

ModelView只通過Controller進行通信。 Controller通過接口導致相當多的嵌套代碼與ModelView進行通信。

在我的老闆審查了代碼後,他抱怨說這不是模塊化的。他想要一個更模塊化的方法。他可以在哪裏放置一個新的模塊,或者在沒有太多麻煩的情況下移除模塊。 模塊,他的意思就像一個工具欄,一張桌子,菜單欄......所有關於我的View模型。 他也不喜歡他所看到的所有接口和嵌套代碼。

你有什麼建議可以改變我的方法,而不會搞亂我已經擁有的所有代碼(這真的是很多代碼,真的很多!)。

我沒有谷歌的「java mvc模塊化」,我沒有找到關於此的很多信息。

我認爲可以解決我的問題的方法是使用EventBus。模塊只需要使用總線發送一個事件,控制器就可以處理它。至少沒有更多的嵌套代碼與所有這些接口。

與總線我只想做類似(在模塊):

bus.post(new MyEvent()); 

和控制器上:

@Subscribe 
public void onEventMyEvent(MyEvent event) { 
    // handle the event 
} 

------------ ---編輯-------------

閱讀由用戶提供的鏈接(在評論部分),並得出結論,我現在正在做的是使用MVP (Model View Presenter)由此圖像代表:enter image description here(圖片信息到udalmik,在這裏找到:enter link description here

+0

而你的問題是? – MadProgrammer 2014-09-01 01:20:02

+1

可能[重複](http://stackoverflow.com/q/25502552/230513):「沒有任何交互需要通過您的應用程序的控制器。」 – trashgod 2014-09-01 01:23:41

+0

@MadProgrammer如何使我的方法更模塊化,如果有可能使用MVC – dazito 2014-09-01 01:23:45

回答

1

模型,視圖,控制器模式允許我們將業務邏輯,屏幕渲染和處理異步事件分離成離散類。這樣做的好處是它可以將GUI驅動應用程序的所有基本職責有效地分解爲專用類。這意味着每個類的功能是孤立的,這更好地適應特定於應用程序的定製和可維護性。

因此,使用這種基本方法,應用程序的整體架構對於您的應用程序而言是非常好的,但是您的上司所尋找的內容稍有不同。他要求實施一些架構,這將允許您快速簡單地修改UI。所以,馬上,你可以告訴他所要求的是關於MVC的View元素。

下面我使用僞代碼來提供如何創建這些模塊化圖形元素的通用示例。

public final class View { 

private GUIElement mModularElement; 

public final void setModularElement(final GUIElement pModularElement) { 
    this.mModularElement = pModularElement; 
} 

public final GUIElement getModularElement() { 
    return this.mModularElement; 
} 

public final void onRender(final GUIVariable pGUIVariable) { 
    this.getModularElement().draw(pGUIVariable); 
} 

}

在這段代碼中,我們定義GUIElement類型的應用程序訪問的一種叫做ModularElement實例的View。通過使用公共的getter/setter方法,Controller可以讓View呈現任何類型的從GUIElement繼承的Object。因此,如果您想要更改GUI,則可以指定一種新的GUIElement而不更改周圍的體系結構。

這是一個基本的例子,因爲GUIElement需要處理其他類型的責任,而不僅僅是渲染,以最大限度地提高靈活性。這些將包括定義屏幕布局,封裝更多圖形元素,他們如何處理MotionEvents,都在擴展GUIElement的功能。你甚至可以繪製一系列GUIElement。重要的是,您的Model中將存在mModularElement以遵守MVC模式;上面的實現爲了簡單起見避免了這一點。

希望這會有所幫助。