首先,我來自MVC的大背景,當(dāng)我開始使用PHP時(shí),我瀏覽了很多次,嘗試用PHP完善我的MVC-Like設(shè)計(jì)。很多人都喜歡回答了很多幫助我的答案。但是在Swing中開始GUI開發(fā)之后,關(guān)于Swing中MVC的答案是完全不同的。例如,模型也是一種觀點(diǎn)?根據(jù)Oracle的建議 TextElementModel在這里沒有任何邏輯業(yè)務(wù),它所做的只是標(biāo)記(設(shè)置顏色等)和設(shè)置數(shù)據(jù),如設(shè)置文本等。當(dāng)我用PHP開發(fā)時(shí),沒有這樣的事情,AbstractModel因?yàn)槲铱偸潜桓嬷P筒皇且粋€(gè)類,或者更多,它是一個(gè)處理邏輯業(yè)務(wù)的整個(gè)層。在PHP中,我使用了服務(wù),數(shù)據(jù)映射器和域?qū)ο?,這個(gè)驚人的答案提示我在PHP中幫助了我:如何在MVC中構(gòu)建模型?我的嘗試再次閱讀之后,我想在Java中做一個(gè)類似的事情:我有ControllerContainer創(chuàng)建所有控制器:public class ControllerContainer { private JFrame frame; public ControllerContainer(JFrame rune) { this.frame = frame; } public void initControllers() { Atest test = new Atest(frame); test.registerView("test", new ViewTest(test)); }}如您所見,我將帶有實(shí)例的名為“test”的視圖添加ViewTest到控制器中,現(xiàn)在它將在框架中可見,并且可以接受輸入。我的Controller班級,應(yīng)該是抽象的,但我還沒有把它抽象化:public class Controller { private JFrame frame; private Map<String, Component> views = new HashMap<String, Component>(); public Controller(JFrame frame) { this.frame = frame; } protected void registerView(String title, Component c) { this.views.put(title, c); this.frame.add(c); } protected void deregisterView(String title) { this.frame.remove(this.views.get(title)); this.views.remove(title); } protected Component getView(String title) { return this.views.get(title); }}還有一個(gè)測試控制器:public class Atest extends Controller { public Atest(JFrame frame) { super(frame); } public void hit() { ((ViewTest) super.getView("test")).changeColorBlue(); }}問題如您所見,我的視圖創(chuàng)建了一個(gè)新按鈕,并為其添加了一個(gè)鼠標(biāo)偵聽器。監(jiān)聽器將有權(quán)訪問控制器以傳遞輸入??刂破鳙@取輸入并更改視圖。基本上,控制器立即被迫更新視圖,沒有任何嚴(yán)肅的邏輯業(yè)務(wù),因?yàn)樵谖业那闆r下不需要它。根據(jù)我上面發(fā)布的鏈接,tere?ko回答,我如何正確使用他的想法和Java Swing的建議?在PHP背景之后,我真的很困惑。也許我是誤解,一切都應(yīng)該用不同的語言做不同的事情?但我認(rèn)為模式應(yīng)該始終以相同的方式實(shí)現(xiàn)。如果您需要更多信息,請告訴我們。
3 回答

慕斯王
TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超2個(gè)贊
因此,如果我創(chuàng)建一個(gè)MVC程序,其中Model是一個(gè)將AVI轉(zhuǎn)換為MP4的視頻庫,并且我在其上放置了一個(gè)視圖并且它工作得很好。后來我想分發(fā)轉(zhuǎn)換器庫,所以有人想創(chuàng)建自己的視頻轉(zhuǎn)換器軟件,但太糟糕了,因?yàn)樵搸烊Q于視圖!所以這就是為什么第一種模式非常糟糕,需要一種特殊的才能來設(shè)計(jì)那種糟糕的模式。
添加回答
舉報(bào)
0/150
提交
取消