Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Статьи (http://www.flasher.ru/forum/forumdisplay.php?f=101)
-   -   Хорошее MVC (http://www.flasher.ru/forum/showthread.php?t=138349)

Dukobpa3 15.01.2012 22:16

Цитата:

PS: повешать слушатель во вьшке на юнита мы не можем.
в контроллере достаточно повесить слушатель на всю большую вью, а из юнитов диспатчить события с bubbles=true - тогда они будут насквозь пролетать аж до контроллера, и контроллер сможет их поймать и обработать. В большой вью делать ничего не нужно для этого.

HardCoder 15.01.2012 22:37

Короче говоря - надо все переписывать. Я как-бы понимаю что такое MVC, и понимаю что моя стратегия написания неправильна. Но в то же время не понимаю как мне полностью абстрагировать вьюшку от всего происходящего, как организовать работу их троих... Конечно, каждый случай уникальный, правила игры уникальные, поэтому мне самому нужно думать. Но может, если кто-то делал хотя бы похожее, подскажите, пожалуйста, как вы строили эту структуру.
PS: все делается без сервера.

Dukobpa3 15.01.2012 22:42

Ну переписывать это кардинальное решение)
Как сделать я тебе уже ответил, чуть выше. Если хочешь можешь в личку/скайп стучаться.

fish_r 15.01.2012 22:53

Цитата:

Сообщение от Dukobpa3 (Сообщение 1057101)
Контроллер: получает от вью событие клика. Вносит в модель новые координаты объекта. На этом всё.
Вью: слышит маяк от модели что ее поменяли. Смотрит что поменяли координаты такого-то объекта, а текущие координаты то отличаются. И вот вью покорно начинает двигать объект с точки на точку с анимашками и прочими свистелками.

Модель не должны интересовать координаты объекта, для неё объект - некая статистическая единица, с набором соотв. информации (кол-во жизни, патронов и пр.), ИМХО, конечно (на классика пока не тяну )).
Думаю, что контроллер должен трансформировать данные из вью-типа в данные модель-типа, что собсно
и является его прямой обязанностью.

Цитата:

И так вопрос. Контроллер обработал некую информацию. В соответствии с этой информацией нужно провести изменения в представлении. Но дело в том, что эти изменения модели не касаются. Что делать? Напрашиваются такие варианты:
Если говорить не о "хорошем" MVC, а о классической реализации, то контроллер интерпретирует данные
и при необходимости изменяет вьюер (не знаю конкретики, но звено "контроллер", почти всегда лишнее, если события порождают информацию касающуюся только вьюера).

Dukobpa3 15.01.2012 22:57

Цитата:

Модель не должны интересовать координаты объекта,
В данном случае координаты это часть модели карты, поэтому они в модели быть должны.

Вообще задача модели хранить всю информацию, которая позволит воссоздать картину происходящего с какой-нибудь другой вьюхой например. Если речь идет о карте то координаты с ней неразрывно связаны.

Если же это будут координаты какой-то там звездочки которая выпадает откуда-то как некий эффект, то конечно ее координаты никому кроме вью не понадобятся.

HardCoder 15.01.2012 23:16

Значит, я так понял, что: классы юнитов это всего лишь каркасы, которые не должны нести графического представления? Они должны лишь иметь ссылку на класс графического обьекта который они представляют (король, солдат, дом...). А вьюха должна создавать не новые юниты и добавлять их на сцену, которыми оперирует контроллер, а новые анимашки (король, солдат...). Ой-ой-ой сколько же работы предстоит!!!

Dukobpa3 15.01.2012 23:24

Нет.
Каждый юнит это тоже моделька МВЦ, маленькая.
У каждого юнита есть модель
Есть вью
И возможно есть отдельный контроллер, а может и нет. Скорее всего контроллером всех юнитов будет этот главный контроллер.

Массив моделей юнитов хранится в модели, ни о каких ссылках на спрайты или мувики там речи быть не может.
Массив вьюх в свою очередь хранится в главной вьюхе.
Вьха когда рендерится она смотрит в массив моделек, и создает у себя аналогичный массив визуальных штук, пользуясь данными из этих самых моделек.

Но это одна из частных реализаций, может быть и иначе.

fish_r 16.01.2012 02:43

Цитата:

Сообщение от Dukobpa3 (Сообщение 1057123)
В данном случае координаты это часть модели карты, поэтому они в модели быть должны.

Вообще задача модели хранить всю информацию, которая позволит воссоздать картину происходящего с какой-нибудь другой вьюхой например. Если речь идет о карте то координаты с ней неразрывно связаны.

Не знал, что классические принципы MVC уже изменились.

Задача модели, вообще-то, хранить логику независимо от вьюера, то есть ваше приложение должно одинаково работать и с вьюером, и с двумя (выполненными в разных масштабах, например) и вообще без него, напр. в консольном режиме...

Dukobpa3 16.01.2012 02:46

Комент ради комента.

Я не то же самое сказал?

fish_r 16.01.2012 20:34

Цитата:

Сообщение от Dukobpa3 (Сообщение 1057161)
Комент ради комента.

нет


Цитата:

Я не то же самое сказал?
нет

/всё - 6 знаков, хотя оно того не стоило/


Часовой пояс GMT +4, время: 04:13.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.