Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0 > Статьи

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 15.10.2010, 21:10
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 1  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
да. мс вообще сложно разделить иногда. но в моих реализациях - моджель - это только данные и диспетчер изменений. всё. изменяет данные только контроллер. читать данные может виды и контроллер.
плохо что нельзя разделить доступы для геттеров и сеттеров модели, только через нэймспэйсы или интерфейсы, но это очень не удобно.
приходится в модели реализовывать по 2-м интерфейсам
IМodelReadable (только геттеры) и IModel (геттеры и сеттеры)
первый - для видов - второй для контроллеров. можно забить, но не кошерно..
__________________
Отряд Котовскага

Старый 15.10.2010, 21:24
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 2  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Котярка, а зачем и геттеры и сеттеры? Только для контроллера, а он может иметь полный доступ, т.е. без интерфейсов. Ну это имо )

Старый 15.10.2010, 21:53
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 3  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
я пробовал запрещать видам доступ к модели, принимая только событийные данные, это не всегда удобно.
иногда по событию смены статуса, например, виду нужно прочитать другие данные модели, которые в событии не передаются.
__________________
Отряд Котовскага

Старый 25.10.2010, 03:09
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 4  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от Котяра Посмотреть сообщение
я пробовал запрещать видам доступ к модели, принимая только событийные данные, это не всегда удобно.
иногда по событию смены статуса, например, виду нужно прочитать другие данные модели, которые в событии не передаются.
Это общий дуализм GOF-паттерна Observer. По моему мнению, разработчику необходимо решить какое количество информации необходимо нести в конкретном событии. Можно ввести отдельное событие для каждого изменения модели. Можно ввести одно событие для любого изменения модели. Представление может запросить у модели (POP-операция) недостающие в событии данные. Событие может нести в представление избыточное количество информации (PUSH-система). Истина где-то рядом.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 27.10.2010, 13:07
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 5  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Цитата:
Сообщение от dimarik Посмотреть сообщение
Это общий дуализм GOF-паттерна Observer. По моему мнению, разработчику необходимо решить какое количество информации необходимо нести в конкретном событии. Можно ввести отдельное событие для каждого изменения модели. Можно ввести одно событие для любого изменения модели. Представление может запросить у модели (POP-операция) недостающие в событии данные. Событие может нести в представление избыточное количество информации (PUSH-система). Истина где-то рядом.
Ну я про то же, моя цитата - обоснование использования readOnly интерфейса модели.
В случаях, когда вид должен читать данные модели (POP) - ссылка на модель должна передаваться виду как readOnly интерфейс.
__________________
Отряд Котовскага

Старый 15.10.2010, 21:59
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 6  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
View да. Но Котяра говорил про 2 интерфейса - один для контроллера и я подметил, что в большинстве случаев он лишний.

Старый 15.10.2010, 22:28
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 7  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
2Тигра -да насчёт интерфейса для контроллера ты частично прав. контроллер имеет полный доступ, но мне приходилось делать Action ( в соседней теме обсуждается), которые являются частью контроллера, т.е. могу т изменять модель - им в качестве праметра передавались частичные интерфейсы IModel.
например в контроллере у меня встречатся такой код:
Код AS3:
this.addAction(new ChangeStatusAction(this /* as IController*/, 
                                                               model /* as IStatusModel*/, 
                                                               GameStatus.BET));
ChangeStatusAction - может использоваться в другом контроллере, он например проверяет некие флаги доступные в IStatusModel и меняет поле status у модели..
всё это очень частный случай, просто у меня есть больше 100 независимых казиношных игр с более-менее общим кодом (всё лежит в одном пакете кода), общая механика может быть похожей, но в некоторых нюансах отличаться.. поэтому приходиться быть очень гибким чтобы не использовать копипасту, а использовать ООП.
__________________
Отряд Котовскага


Последний раз редактировалось Котяра; 15.10.2010 в 22:32.
Старый 15.10.2010, 22:31
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 8  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Угумс, согласен.
Знаю, что код выдернут из контекста но... ты вроде ведь не пишешь this и super?

Старый 15.10.2010, 22:34
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 9  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
код написал прям здесь - this не пишу, это для здесь - как указание, что это метод контроллера
__________________
Отряд Котовскага

Старый 16.10.2010, 05:57
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 10  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Котяра, на мой взгляд тоже: с двумя интерфейсами - перебор. Вот можно сделать так (через нэймспейсы):
Model.as
Код AS3:
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;
		}
 
	}
}
А в контроллере, для примера, что-то вроде:
Код AS3:
var m:Model = new Model();
var nsSetter:Namespace = m.getNsSetter(this);
 
m.myProperty; // read
m.nsSetter::myProperty = "lalala"; // write
В getNsSetter( controller:IController ) - IController для примера. Можно и не для контроллера сделать.

Или вообще переменной _myProperty назначить не protected, а сразу _nsSetter нэймспейс. А сеттер myProperty и вовсе убрать. Тогда в контроллере нужно будет работать через неймспейс с переменной, а в остальных классах - только с геттером.


Последний раз редактировалось i.o.; 16.10.2010 в 06:30.
Создать новую тему Ответ Часовой пояс GMT +4, время: 16:16.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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