Тема: Хорошее MVC
Показать сообщение отдельно
Старый 28.06.2012, 17:33
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 429  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от incvizitor Посмотреть сообщение
Ага, спасибо. Только что такое "ленивый геттер" ?

А еще вот в swiz, была такая фишка, всё что попадает на сцену проижектывается автоматом. С этой фичей мы избавляемся от маппинга, но за то приобретаем плюся ДИ. Может быть такую систему можно заюзать для того что бы дочерние модели получали то что нужно?
Ну прям выдерну пример ленивого геттера:

Код AS3:
/**
 * @private
 */
private var _user:UserData;
 
public function get user():UserData {
	if (!this._user || !this._user.contains(this)) {
		this._user = null;
		var parent:DataContainer = super.parent;
 
		while (parent) {
			if (parent is IUserAsset) {
				this._user = (parent as IUserAsset).user;
				break;
			}
 
			if (parent is UserData) {
				this._user = parent as UserData;
				break;
			} 
 
			parent = parent.parent;
		}
	}
 
	return this._user;
}
Хотя в случае с глобальной моделью, уже инжект:

Код AS3:
/**
 * @private
 */
private var _universe:UniverseData;
 
public function get universe():UniverseData {	
	return this._universe;
}
 
[Exclude]
public function set $universe(value:UniverseData):void {
	if (this._universe == value) return;
	if (!value) this.removedFromUniverse();
	this._universe = value;
	if (value) this.addedToUniverse();
 
	if (this is DataContainer) {
		var dc:DataContainer = this as DataContainer;
		var num:int = dc.numChildren;
 
		while (num --> 0) {
			var child:Data = dc.getChildAt(num);
			if (child is IUniverseAsset) child['$universe'] = value;
		}
	}
}