Тема: Хорошее MVC
Показать сообщение отдельно
Старый 02.11.2014, 15:22
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 635  
Ответить с цитированием
Gerbert
Banned

Регистрация: Aug 2014
Сообщений: 461
Цитата:
И в первом и во втором случае логика это подсчёт очков и наверное запуск таймера.
В том-то и дело, что логика, это очки и таймер. А все остальное, это представление.
Логика, это то, без чего приложение не будет приложением. Можно подумать, что таймеру и во вью неплохо,
но если заменить вью на другую, то таймера может и не быть и приложение сломается.

Я бы прежде всего разобрался с BaseView и выяснил, что будет входить в её обязанности.
Просто бывают моменты, когда удобней, чтобы Base или MainView выступала ещё и в роли
Mediator'a. Медиатор нужен для того, чтобы CanvasView, различные MenuBoxView могли общаться между собой.
Можно сделать отдельно медиатор, который будет связывать все представления событиями.
И этот же медиатор будет прокси для контроллера. То есть, медиатор будет хранить немного логики,
которая не должна находится в контроллере, а должна находится в представлении.
Эта логика и будет решать, передать событие в какую-то вью или передать в контроллер.

Далее, у Вас должен быть класс Слой, который реализует всевозможные интерфейсы - IDrag, IFilter и тд.
Так же должна быть фабрика этих слоев.
И когда Вы щелкаете по кнопке "создать новый слой", посылается событие, которое ловит медиатор.
Что делать с этим событием? Если у Вас логика приложения гласит "в этом приложении нельзя создать более
ста слоев", то медиатор должен послать сообщение для контроллера, который изменит модель.
Ну а дальше медиатор или модель посылает событие, которое ловит другой медиатор ( медиатор создания слоев )
и он уже берет из фабрики новый экземпляр класса Слой и.. И дальше уже Ваша фантазия - Вы можете передать его сразу во все можули ( драг, филтры и ... ) либо же просто отдать в коллекцию слоев и в канвас для addChild.

Объяснять можно бесконечно и вопросы у Вас никогда не закончатся, они есть у всех и решения их не дает заскучать.
По этому делайте и у Вас все получится. Самое главное в начале понять принцип разделения ответственности.
Писать код модульно и писать его не в контексте приложения, а в контексте теста. То есть, Вы создаете среду
имитирующую работу приложения и создаете модуль-библиотеку.