Показать сообщение отдельно
Старый 20.07.2013, 23:20
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 1  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Цитата:
Сообщение от Babylon Посмотреть сообщение
На самом деле удобно иметь несколько контроллеров для вида, модели и глобальный для ядра.
В глобальном лучше размещать основные команды ядра. Контроллер вида обслуживает виджеты,
а контроллер модели сервисы. Скелет вида, модели и контроллер команд, у меня естественно XML, ноды которого передаются в соответствующие конструкторы дисплей контейнеров вида , которые затем рендерятся виджетами. Соответственно вся иерархия в виде графа, который агрегатирован по parent id соответствующей xml ноды.



Нода вида
...
Нода Коллекция виджетов

.....

Нода Коллекция команд и хэндлеров
....
Нода Коллекция сервисов
Имеется ввиду что вся структура программы генерируется на основании подгружаемого XML? Если да, для меня пока это будет сложно повторить но про перспективы возможности можно только догадываться )

Пока написал вот это
Код AS3:
package  {
 
	import flash.display.Sprite;
 
	import me.inpictures.Controller;
	import flash.events.Event;
 
	public class InPictures extends Sprite {
 
		public function InPictures() {
 
			addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event):void {
 
			removeEventListener(Event.ADDED_TO_STAGE, init);
 
			var controller:Controller = new Controller(stage,this);
		}
	}
}
Controller - главный контроллер
Код AS3:
package me.inpictures {
 
	import me.inpictures.worker.Framework;
	import me.inpictures.worker.app.Auth;
	import me.inpictures.worker.app.Registration;
	import me.inpictures.worker.amf.AMF
 
	import me.inpictures.data.User;
 
	import flash.events.Event;
 
	import flash.display.DisplayObjectContainer;
	import flash.display.Stage;
 
	import me.inpictures.worker.GetFlashVars;
	import me.inpictures.worker.api.SocialNetwork;
 
	public class Controller {
 
		private var _stage:Stage;
 
		private var _user:User;
 
		private var framework:Framework;
 
		private var _model:Model = new Model();
		private var _viewer:Viewer = new Viewer(_model);
 
		private var _container:DisplayObjectContainer;
 
		public function Controller(stage:Stage, container:DisplayObjectContainer) 
		{
			_stage = stage;
 
			_container = container;
 
			init();
		}
 
		private function init():void {
 
			_container.addChild(_viewer);
 
			_model.addEventListener(Model.PAGE_UPDATE, pageUpdate);
 
			new AMF('http://dev.net/app/Amfphp/');
 
			_user = new User();
 
			framework = new Framework();
 
			framework.addTask(new GetFlashVars(_stage,_user));
			framework.addTask(new SocialNetwork(_user));
			framework.addTask(new Auth(_user,_model));
			framework.run();
		}
 
		private function pageUpdate(e:Event):void {
 
			switch (_model.page ) 
			{
				case Model.PAGE_REGISTRATION: 
 
					new Registration(_user,_model).run();
 
				break;
			}
		}
	}
}
Model - главная модель
Код AS3:
package me.inpictures {
 
	import flash.events.Event;
	import flash.events.EventDispatcher;
 
	public class Model extends EventDispatcher {
 
		public static var UPDATE:String = 'update';
 
		public static var PAGE_UPDATE:String = 'page_update';
 
		public static var PAGE_REGISTRATION:String = 'page_registration';
 
		private var _page:String = 'default';
 
		public function Model() {
 
		}
 
		public function get page():String {
			return _page;
		}
 
		public function setPage(page:String):void {
 
			_page = page;
 
			dispatchEvent(new Event(PAGE_UPDATE));
		}
	}
}
Viewer - главный вьювер ( пока не используется, работаю пока только с данными)
Код AS3:
package me.inpictures {
	import flash.events.Event;
	import flash.display.Sprite;
 
	public class Viewer extends Sprite  {
 
		private var _model:Model;
 
		public function Viewer(model:Model) {
			_model = model;
			_model.addEventListener(Model.UPDATE, update );
		}
 
		private function update(e:Event):void {
			trace('>>>update');
		}
	}	
}
User - модель пользователь ( черновая версия )
Код AS3:
package me.inpictures.data {
 
	import flash.events.EventDispatcher;
	import flash.events.Event;
 
	public class User extends EventDispatcher {
 
		public static var NEW_USER:String = 'new_user';
 
		private var _systemId:uint = 0;
		private var _uid:uint = 0;
		private var _network:String = 'unbrowse';
 
		public function User() {
			_network = 'vk';
		}
 
		public function get sid():uint {
			return _systemId;
		}
 
		public function get uid():uint {
			return _uid;
		}
 
		public function sign(data:*):Object {
 
			var send:Object = new Object();
 
			if ( data is Object || data is Array) {
 
					var ind:String;
 
					for ( ind in data) {
						send[ind] = data[ind];
					}
 
					send.sign = true;
 
			} else if (data is String) {
					send.string = data;
				} else send.sign = false;
 
			return send;
		}
 
		public function get simple():Object {
 
			var data:Object = new Object();
				data.uid = uid;
				data.network = _network;
 
			return data;
		}
 
		public function setFlashVars(data:Object):void {
 
			if (!_uid) _uid = (data.viewer_id) ? uint(data.viewer_id) : 16580191;
 
		}
 
		public function auth(data:Object):void {
 
			_systemId = (_systemId) ? _systemId : uint(data.uid.sys);
 
			if (data.registration) dispatchEvent(new Event(User.NEW_USER));
 
 
			for ( var i in data) {
				trace( i + " >> "+data[i]);
				for ( var ii in data[i]) {
					trace(' >> '+ii+' >> '+data[i][ii]);
				}
			}/***/
		}
 
		public function get all():Object {
 
			var data:Object = new Object();
				data.sys = _systemId;
				data.uid = uid;
				data.network = _network;
				data.first_name = _first_name;
				data.last_name = _last_name;
				data.sex = _sex;
				data.nickname = _nickname;
				data.photo = _photo;
				data.bday = _bday;
				data.city = _city_id;
				data.country = _country_id;
 
			return data;
 
		}
 
		public function socialAuth(data:Array):void {
 
			if (data.length && _uid == data[0].uid) {
 
				_nickname 	= data[0].first_name;
				_sex 		= data[0].sex-1;
				_realname 	= data[0].first_name+" "+data[0].last_name;
				_first_name = data[0].first_name;
				_last_name = data[0].last_name;
 
				if (data[0].bdate) {
					if (data[0].bdate.length>0) {
						var r = data[0].bdate.split(".");
 
						r[0] = (r[0]) ? r[0] : "1";
						r[1] = (r[1]) ? r[1] : "1";
						r[2] = (r[2]) ? r[2] : "1950";
 
						r[0] = (r[0]<10) ? "0"+r[0] : r[0];
 
						r[1] = (r[1]<10) ? "0"+r[1] : r[1];
 
						_bday = r[2]+" "+r[1]+" "+r[0];
					} else _bday = "1950 01 01";
				} else _bday = "1950 01 01";
 
				_photo = data[0].photo_big;
 
				_city_id = (data[0].city) ? data[0].city : 0;
				_country_id = (data[0].country) ? data[0].country : 0;
			}
		}
 
		private var _first_name:String = '';
		private var _last_name:String = '';
 
		private var _bday:String = '';
		private var _nickname:String = '';
		private var _sex:Number = 0;
		private var _realname:String = '';
		private var _photo:String = '';
		private var _city_id:uint = 0;
		private var _country_id:uint = 0;
 
	}
}
"Внутренние" контроллеры
Код AS3:
package me.inpictures.worker {
 
	import flash.display.Stage;
	import flash.events.Event;
	import me.inpictures.data.User;
 
	public class GetFlashVars extends Worker {
 
		public function GetFlashVars(stage:Stage, _user:User) {
 
			_user.setFlashVars(stage.loaderInfo.parameters as Object);
 
			dispatchEvent(new Event(Event.COMPLETE));
		}
	}	
}
Код AS3:
package me.inpictures.worker.app {
 
	import flash.events.Event;
 
	import me.inpictures.Model;
 
	import me.inpictures.data.User;
 
	import me.inpictures.worker.Worker;	
	import me.inpictures.worker.amf.AMF;
 
	public class Auth extends Worker {
 
		private var _user:User;
		private var _model:Model;
 
		public function Auth(user:User , model:Model) {
 
			_user = user;
			_model = model;
 
			if (!_user.hasEventListener(User.NEW_USER)) 
				_user.addEventListener(User.NEW_USER, newUser );
 
		}
 
		private function newUser(e:Event):void {
 
			_model.setPage(Model.PAGE_REGISTRATION);
 
			_user.removeEventListener(User.NEW_USER, newUser);
 
		}
 
		override public function run():void {
 
			AMF.call('User/auth', _user.auth, _user.simple );
 
			dispatchEvent(new Event(Event.COMPLETE));
		}
	}
}
Код AS3:
package me.inpictures.worker.app {
 
	import me.inpictures.data.User;
	import me.inpictures.Model;
 
	import me.inpictures.worker.Worker;
	import me.inpictures.worker.amf.AMF;
 
	public class Registration extends Worker {
 
		private var _user:User;
		private var _model:Model;
 
		public function Registration(user:User , model:Model) {
 
			_user = user;
			_model = model;
		}
 
		override public function run():void {
 
			AMF.call('User/registration', _user.auth, _user.all );
		}
 
	}
 
}
Подправьте если ушел не в ту степь
__________________
return this...