|
|
|||||
Banned
[+1 06.12.14]
[+1 18.12.14] [+1 30.12.14] Регистрация: Aug 2014
Сообщений: 461
|
Делайте, а то ошибку не увидите.
|
|
|||||
Регистрация: Nov 2012
Сообщений: 55
|
Я догадываюсь в чём ошибка - неточное использование модели?
//Модель GameModel { gameOver = false; score = 0; setGameOverState(flag) { gameOver = flag; dispatchEvent(Event.CHANGE_STATE); } getGameOverState() { return gameOver; } addScore() { score += 10; //не кричим вьюшке } getScore() { return score; } } //Представление GameView { model; canvas; constructor(_model) { model = _model; canvas = new Canvas(); model.addEventListener(Event.CHANGE_STATE, showScore); stage.addEventListener(MouseEvent.MOUSE_DOWN, drawCircle); setTimeout(dispatchTimerOver, 20000); } drawCircle() { //тут типа окуружность рисуется и добавляется на сцену circle = new CircleView(canvas, canvas.mouseX, canvas.mouseY); } showScore() { if (model.getGameOverState() == true) { trace(model.getScore()); } } dispatchAddScore() { dispatchEvent(Event.ADD_SCORE); } dispatchTimerOver() { dispatchEvent(Event.TIMER_OVER); } } //Контроллер GameController { model; view; constructor(_model, _view) { model = _model; view = _view; view.addEventListener(Event.ADD_SCORE, addScore); view.addEventListener(Event.TIMER_OVER, setGameOverState); } addScore() { model.addScore(); } setGameOverState() { model.setGameOverState(true); } } //Вьюшка Окружности CircleView { //рисуется окружность } |
|
|||||
Banned
[+1 06.12.14]
[+1 18.12.14] [+1 30.12.14] Регистрация: Aug 2014
Сообщений: 461
|
Вы неправильно определяете логику приложения, то есть модель, а из этого вытекают и все последующие ошибки. Нужно научится отделять логику от представления и это уже mvc.
Прежде всего ответьте на вопрос - что в первом случаи логика и что логика во втором. И вот только эта логика и должна быть в модели. |
|
|||||
Регистрация: Nov 2012
Сообщений: 55
|
И в первом и во втором случае логика это подсчёт очков и наверное запуск таймера.
|
|
|||||
Banned
[+1 06.12.14]
[+1 18.12.14] [+1 30.12.14] Регистрация: Aug 2014
Сообщений: 461
|
Цитата:
Логика, это то, без чего приложение не будет приложением. Можно подумать, что таймеру и во вью неплохо, но если заменить вью на другую, то таймера может и не быть и приложение сломается. Я бы прежде всего разобрался с BaseView и выяснил, что будет входить в её обязанности. Просто бывают моменты, когда удобней, чтобы Base или MainView выступала ещё и в роли Mediator'a. Медиатор нужен для того, чтобы CanvasView, различные MenuBoxView могли общаться между собой. Можно сделать отдельно медиатор, который будет связывать все представления событиями. И этот же медиатор будет прокси для контроллера. То есть, медиатор будет хранить немного логики, которая не должна находится в контроллере, а должна находится в представлении. Эта логика и будет решать, передать событие в какую-то вью или передать в контроллер. Далее, у Вас должен быть класс Слой, который реализует всевозможные интерфейсы - IDrag, IFilter и тд. Так же должна быть фабрика этих слоев. И когда Вы щелкаете по кнопке "создать новый слой", посылается событие, которое ловит медиатор. Что делать с этим событием? Если у Вас логика приложения гласит "в этом приложении нельзя создать более ста слоев", то медиатор должен послать сообщение для контроллера, который изменит модель. Ну а дальше медиатор или модель посылает событие, которое ловит другой медиатор ( медиатор создания слоев ) и он уже берет из фабрики новый экземпляр класса Слой и.. И дальше уже Ваша фантазия - Вы можете передать его сразу во все можули ( драг, филтры и ... ) либо же просто отдать в коллекцию слоев и в канвас для addChild. Объяснять можно бесконечно и вопросы у Вас никогда не закончатся, они есть у всех и решения их не дает заскучать. По этому делайте и у Вас все получится. Самое главное в начале понять принцип разделения ответственности. Писать код модульно и писать его не в контексте приложения, а в контексте теста. То есть, Вы создаете среду имитирующую работу приложения и создаете модуль-библиотеку. |
|
|||||
Регистрация: Nov 2012
Сообщений: 55
|
Спасибо, очень ценный ответ. Не зря потратил время. Теперь прояснились многие непонятные моменты с моделями и я почему-то недооценил роль медиаторов для взаимодействия с представлениями, пытаясь привязать представления строго к моделями из-за чего и получил неудачную и неясную структуру. Спасибо вам за потраченное время, всё здорово и понятно изложено. Вопросов больше нет.
П.С. я не пытаюсь написать фотошоп, но хочу сделать продуманный костяк, на котором можно будет написать любой графический редактор. |
Часовой пояс GMT +4, время: 12:51. |
|
« Предыдущая тема | Следующая тема » |
|
|