SoftwareDevelopmentMagazine ์ ์๊ฐ๋ ModelViewPresenter ๊ด๋ จ ๊ตฌํ ์.
http://www.sdmagazine.com/documents/s=7147/sdm0206b/0206b.htm
http://www.sdmagazine.com/documents/s=7147/sdm0206b/0206b.htm
์์ค์ฝ๋๋ฅผ ๋ณด๋ฉด ๋ค์์ ํด๋์ค๋ค ๊ด๊ณ๊ฐ MVP ์ด๋ค.
Game - Model. ๊ด๊ณ๋ Presenter ์๋ง ๋งบ๋๋ค. ์ธ๋ถ์์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์๋๋ Presenter ๋ฅผ ํตํด ํต์ง๋ฐ๋๋ค.
Game - Model. ๊ด๊ณ๋ Presenter ์๋ง ๋งบ๋๋ค. ์ธ๋ถ์์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์๋๋ Presenter ๋ฅผ ํตํด ํต์ง๋ฐ๋๋ค.
BoardPanel - View. ์ค์ Swing ๋ฑ ๊ตฌ์ฒด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ด์ฉ, ์ค์ ํํ์ ํ๋ค. BoardPresenter ์ ์ํธ์ฐธ์กฐ ๊ด๊ณ๋ฅผ ๊ฐ์ง๋ค.
๊ด๊ณ๋ฅผ ๋งบ๋ ์ฝ๋๋ Dots.java ์ ์๋ค. ์ฆ, initialize() ๋ฅผ ๋ณด๋ฉด ๋ค์์ ์ฝ๋๊ฐ ๋์จ๋ค.
~cpp _game = new Game(4, Arrays.asList(new String[] {"JL", "TL", "KML"})); BoardPanel boardPanel = new BoardPanel(); boardPanel.setGame(_game);์ค์ ๋ก BoardPanel.setGame ์ ๋ณด๋ฉด
~cpp public void setGame(Game game) { _presenter = new BoardPresenter(game, this); _pixelSize = getIdealSize(); setSize(_pixelSize); }์ด๋ฉฐ BoardPresenter ๋ฅผ ๋ณด๋ฉด
~cpp public BoardPresenter(Game game, BoardPresenterDrawListener listener) { _game = game; _game.addListener(this); _listener = listener; }์ด๋ค. (BoardPresenter ์์ listener ๋ BoardPanel)
๊ทธ๋ฆฌ๊ณ BoardPanel ์์ ์ด๋ฒคํธ ๋ฐ์์์๋
BoardPanel.mouseReleased -> BoardPresenter.processClick -> Game.join ์์ผ๋ก ํธ์ถ๋๋ฉฐ
Game ๊ฐ์ฒด์ ๋ฐ์ดํฐ๊ฐ ๋ฐ๋๋ ๊ฒฝ์ฐ์๋ (ex : boxClosed)
Game.boxClosed -> listener.boxClosed (์ฌ๊ธฐ์ listener ๋ Presenter. Presenter ๋ค์ ์ฌ๋ฌ๊ฐ๊ฐ ๋ ์ ์๋ค. Game ๊ฐ์ฒด์ addListener ๋ก ๋ฑ๋ก๋ ๋งํผ) -> BoardPanel.drawInitials. ์์ผ๋ก ๋๋ฉ์ธ ๋ชจ๋ธ๋ก๋ถํฐ ์ฌ๋ผ์จ๋ค.
BoardPanel.mouseReleased -> BoardPresenter.processClick -> Game.join ์์ผ๋ก ํธ์ถ๋๋ฉฐ
Game ๊ฐ์ฒด์ ๋ฐ์ดํฐ๊ฐ ๋ฐ๋๋ ๊ฒฝ์ฐ์๋ (ex : boxClosed)
Game.boxClosed -> listener.boxClosed (์ฌ๊ธฐ์ listener ๋ Presenter. Presenter ๋ค์ ์ฌ๋ฌ๊ฐ๊ฐ ๋ ์ ์๋ค. Game ๊ฐ์ฒด์ addListener ๋ก ๋ฑ๋ก๋ ๋งํผ) -> BoardPanel.drawInitials. ์์ผ๋ก ๋๋ฉ์ธ ๋ชจ๋ธ๋ก๋ถํฐ ์ฌ๋ผ์จ๋ค.