INCLUDE_DATA

Deprecated interfaces in Flex Cairngorm Framework

Cairngorm 2.1 framework deprecates a few interfaces

1. In package: com.adobe.cairngorm.vo.IValueObject, interface ValueObject by IValueObject
2. In package: com.adobe.cairngorm.model, inferace ModelLocator by IModelLocator
3. In package: com.adobe.cairngorm.business, interface Responder has been replaced by mx.rpc.IResponder
4. In package: com.adobe.cairngorm.commands, interface com.adobe.cairngorm.commands.Command by ICommand

Those interfaces have been marked in documentation as deprecated so it invloves a couple changes to your Value Objects, Models, Commands and Delegates.

To demonstrate changes I used great Flex Carnihorm Login example published by Alex Uhlmann.

The diffrerances in interfaces are rather subtele but I am glad that guys from Cairngorm decided to use Flex native mx.rpc.IResponder instead their or own responder interface. Now it is easier to understood this MVC framework.

1. Change in LoginVO class

package com.adobe.cairngorm.samples.login.vo
{
	import com.adobe.cairngorm.vo.IValueObject;

   [Bindable]
	public class LoginVO implements IValueObject
	{
		public var username : String;
		public var password : String;
		public var loginDate : Date;
	}

}

2. Change in Model locator class

package com.adobe.cairngorm.samples.login.model
{
 	import com.adobe.cairngorm.model.IModelLocator;

 	[Bindable]
	public class ModelLocator implements com.adobe.cairngorm.model.IModelLocator
	{
		private static var instance : ModelLocator

		public static function getInstance() : ModelLocator
		{
			if ( instance == null )
				instance = new com.adobe.cairngorm.samples.login.model.ModelLocator();

			return instance;
	   }

   	public function ModelLocator()
   	{
   		if ( instance != null )
				throw new Error( "Only one ModelLocator instance should be instantiated" );
   	}

		public var login : Login = new Login();
		public var workflowState : Number;

		public static const VIEWING_LOGIN_SCREEN : Number = 1;
		public static const VIEWING_LOGGED_IN_SCREEN : Number = 2;
	}
}

3. Change class LoginCommand


package com.adobe.cairngorm.samples.login.commands
{
import mx.rpc.IResponder;
import com.adobe.cairngorm.commands.ICommand;
import com.adobe.cairngorm.control.CairngormEvent;
import com.adobe.cairngorm.samples.login.business.LoginDelegate;
import com.adobe.cairngorm.samples.login.control.LoginEvent;
import com.adobe.cairngorm.samples.login.model.ModelLocator;
import com.adobe.cairngorm.samples.login.vo.LoginVO;

public class LoginCommand implements ICommand, IResponder
{
private var model : ModelLocator = ModelLocator.getInstance();

public function execute( event : CairngormEvent ) : void
{
model.login.isPending = true;

var delegate : LoginDelegate = new LoginDelegate( this );
var loginEvent : LoginEvent = LoginEvent( event );
delegate.login( loginEvent.loginVO );
}

public function result( data:Object ):void
{
model.login.loginDate = new Date();
model.login.loginVO = LoginVO(data);
model.login.isPending = false;

model.workflowState = ModelLocator.VIEWING_LOGGED_IN_SCREEN;
}

public function fault( info:Object ):void

{
model.login.statusMessage = "Your username or password was wrong, please try again.";
model.login.isPending = false;
}
}
}

4. Change class LoginDelegate

package com.adobe.cairngorm.samples.login.business
{
	import mx.rpc.IResponder;
	import com.adobe.cairngorm.samples.login.vo.LoginVO;

	import flash.utils.setTimeout;

	public class LoginDelegate
	{
		private var responder : IResponder;
		private var service : Object;

		public function LoginDelegate( responder : IResponder )
		{
			//this.service = ServiceLocator.getInstance().getService( "loginService" );
			this.responder = responder;
		}

		public function login( loginVO : LoginVO ): void
		{
			//var token : AsyncToken = service.login( loginVO );
			//token.resultHandler = responder.onResult;
			//token.faultHandler = responder.onFault;

			//for demo purpose: simulate remote service result
			setTimeout( loginResult, 1000, loginVO );
		}

		private function loginResult( loginVO : LoginVO ): void
		{
			if( Math.random() > .5 )
			{
				responder.result(loginVO );
			}
			else
			{
				responder.fault(loginVO);
			}
		}
	}
}

Full source code after changes introduced in Carnigorm 2.1 is available under link

Next Page →