Форум 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)

Zebestov 15.10.2010 19:01

Цитата:

Сообщение от Котяра (Сообщение 942973)
немного меня смущает подмена понятий модели и контроллера у тебя ... модель не должна реализовывать логику - это прерогатива контроллера.

Вопрос спорный, как видно из разных источников. Мне ближе реализация логики в модели, которая кому-то что-то выдает "на показать" (методы для View), от кого-то принимает инструкции "на поменять" (методы для Controller), и вещает в эфир об изменениях (для View, для родителя). А кто эти люди — не ее солдатское дело =)
Пока все стройно.

Цитата:

Сообщение от Котяра (Сообщение 942973)
контроллер не выдаёт сообщений он явно меняет модель.

Согласен — не так выразился. Модель предоставляет публичные методы, контроллер их вызывает.

Psycho Tiger 15.10.2010 19:46

Zebestov, на простых проектах с мвц у меня тоже кода в модели было больше. Когда приходит пора плотной работы с серверами и социальными апи - очень много кода образуется в контроллере.

Zebestov 15.10.2010 21:00

Psycho Tiger, я сейчас переключился на игрострой, так что потренируюсь "на кошках" и проверю в бою свою позицию.
А соц. проект до поры отложен, так что тут пока ничего не отвечу, чтобы не балаболить. Может ты и прав — надо пробовать.

Котяра 15.10.2010 21:10

да. мс вообще сложно разделить иногда. но в моих реализациях - моджель - это только данные и диспетчер изменений. всё. изменяет данные только контроллер. читать данные может виды и контроллер.
плохо что нельзя разделить доступы для геттеров и сеттеров модели, только через нэймспэйсы или интерфейсы, но это очень не удобно.
приходится в модели реализовывать по 2-м интерфейсам
IМodelReadable (только геттеры) и IModel (геттеры и сеттеры)
первый - для видов - второй для контроллеров. можно забить, но не кошерно..

Psycho Tiger 15.10.2010 21:24

Котярка, а зачем и геттеры и сеттеры? Только для контроллера, а он может иметь полный доступ, т.е. без интерфейсов. Ну это имо )

Zebestov 15.10.2010 21:42

Psycho Tiger, а как же View! Для него read-only интерфейс полезен.

Котяра 15.10.2010 21:53

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

Psycho Tiger 15.10.2010 21:59

View да. Но Котяра говорил про 2 интерфейса - один для контроллера и я подметил, что в большинстве случаев он лишний.

Котяра 15.10.2010 22:28

2Тигра -да насчёт интерфейса для контроллера ты частично прав. контроллер имеет полный доступ, но мне приходилось делать Action ( в соседней теме обсуждается), которые являются частью контроллера, т.е. могу т изменять модель - им в качестве праметра передавались частичные интерфейсы IModel.
например в контроллере у меня встречатся такой код:
Код AS3:

this.addAction(new ChangeStatusAction(this /* as IController*/, 
                                                              model /* as IStatusModel*/,
                                                              GameStatus.BET));

ChangeStatusAction - может использоваться в другом контроллере, он например проверяет некие флаги доступные в IStatusModel и меняет поле status у модели..
всё это очень частный случай, просто у меня есть больше 100 независимых казиношных игр с более-менее общим кодом (всё лежит в одном пакете кода), общая механика может быть похожей, но в некоторых нюансах отличаться.. поэтому приходиться быть очень гибким чтобы не использовать копипасту, а использовать ООП.

Psycho Tiger 15.10.2010 22:31

Угумс, согласен.
Знаю, что код выдернут из контекста но... ты вроде ведь не пишешь this и super?


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

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