![]() |
|
||||||||||
|
|
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
да. мс вообще сложно разделить иногда. но в моих реализациях - моджель - это только данные и диспетчер изменений. всё. изменяет данные только контроллер. читать данные может виды и контроллер.
плохо что нельзя разделить доступы для геттеров и сеттеров модели, только через нэймспэйсы или интерфейсы, но это очень не удобно. приходится в модели реализовывать по 2-м интерфейсам IМodelReadable (только геттеры) и IModel (геттеры и сеттеры) первый - для видов - второй для контроллеров. можно забить, но не кошерно..
__________________
Отряд Котовскага |
|
|||||
|
Котярка, а зачем и геттеры и сеттеры? Только для контроллера, а он может иметь полный доступ, т.е. без интерфейсов. Ну это имо )
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
я пробовал запрещать видам доступ к модели, принимая только событийные данные, это не всегда удобно.
иногда по событию смены статуса, например, виду нужно прочитать другие данные модели, которые в событии не передаются.
__________________
Отряд Котовскага |
|
|||||
|
.
|
Это общий дуализм GOF-паттерна Observer. По моему мнению, разработчику необходимо решить какое количество информации необходимо нести в конкретном событии. Можно ввести отдельное событие для каждого изменения модели. Можно ввести одно событие для любого изменения модели. Представление может запросить у модели (POP-операция) недостающие в событии данные. Событие может нести в представление избыточное количество информации (PUSH-система). Истина где-то рядом.
|
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Цитата:
В случаях, когда вид должен читать данные модели (POP) - ссылка на модель должна передаваться виду как readOnly интерфейс.
__________________
Отряд Котовскага |
|
|||||
|
View да. Но Котяра говорил про 2 интерфейса - один для контроллера и я подметил, что в большинстве случаев он лишний.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
2Тигра -да насчёт интерфейса для контроллера ты частично прав. контроллер имеет полный доступ, но мне приходилось делать Action ( в соседней теме обсуждается), которые являются частью контроллера, т.е. могу т изменять модель - им в качестве праметра передавались частичные интерфейсы IModel.
например в контроллере у меня встречатся такой код: this.addAction(new ChangeStatusAction(this /* as IController*/, model /* as IStatusModel*/, GameStatus.BET)); всё это очень частный случай, просто у меня есть больше 100 независимых казиношных игр с более-менее общим кодом (всё лежит в одном пакете кода), общая механика может быть похожей, но в некоторых нюансах отличаться.. поэтому приходиться быть очень гибким чтобы не использовать копипасту, а использовать ООП.
__________________
Отряд Котовскага Последний раз редактировалось Котяра; 15.10.2010 в 22:32. |
|
|||||
|
Угумс, согласен.
Знаю, что код выдернут из контекста но... ты вроде ведь не пишешь this и super?
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
код написал прям здесь - this не пишу, это для здесь - как указание, что это метод контроллера
__________________
Отряд Котовскага |
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Котяра, на мой взгляд тоже: с двумя интерфейсами - перебор. Вот можно сделать так (через нэймспейсы):
Model.as package { public class Model { public function Model() { super(); } protected namespace _nsSetter; protected var _myProperty:String; public function getNsSetter( controller:IController ):Namespace { if( !controller ) return null; return _nsSetter; } public function get myProperty():String { trace( "get myProperty" ); return _myProperty; } _nsSetter function set myProperty( val:String ):void { trace( "set myProperty" ); if( val == _myProperty ) return; _myProperty = val; } } } var m:Model = new Model(); var nsSetter:Namespace = m.getNsSetter(this); m.myProperty; // read m.nsSetter::myProperty = "lalala"; // write Или вообще переменной _myProperty назначить не protected, а сразу _nsSetter нэймспейс. А сеттер myProperty и вовсе убрать. Тогда в контроллере нужно будет работать через неймспейс с переменной, а в остальных классах - только с геттером.
__________________
Загружаем картинки, минуя ошибки безопасности Последний раз редактировалось i.o.; 16.10.2010 в 06:30. |
![]() |
![]() |
Часовой пояс GMT +4, время: 16:16. |
|
|
« Предыдущая тема | Следующая тема » |
|
|