Cairngorm アーキテクチャによると、各サービスのすべてのコマンド クラスに常に障害ハンドラーがあります。
すべてのサービスの Fault ハンドラ イベントを処理する単一のクラスを作成する方法。
Cairngorm アーキテクチャによると、各サービスのすべてのコマンド クラスに常に障害ハンドラーがあります。
すべてのサービスの Fault ハンドラ イベントを処理する単一のクラスを作成する方法。
「常にフォールトハンドラーを持っている」とは、インターフェースを実装する場合のように、契約を意味しますか?
他のすべてのコマンドクラスが拡張する基本コマンドクラスを作成できます。ベースはonfaultハンドラーを実装でき、他のすべてのサブクラスはオプションでそれをオーバーライドできます。
public class BaseCommand implements ICommand
{
public function execute( event:Event ):void
{
}
public function onFault( event:Event ):void
{
}
}
// -- no need to implement onFault in sub-class
public class MyCommand extends BaseCommand
{
public function execute( event:Event ):void
{
}
}
他のすべてのクラスを拡張する基本クラスを作成し、そこに障害ハンドラーを配置します。以下のように: FaultHandlerCairngormCommand extends SequenceCommand implement IResponder
[BaseCommand.as]
public class BaseCommand extends SequenceCommand implements IResponder
{
public function execute( event:CairngormEvent ):void
{
super.execute(event);
}
public function fault( info:Object ):void
{
throw new Error("Generic request failure"); //or handle as you please
}
public function result(data:Object):void
{
throw new Error("The result method implementation defined in IResponder for all extensions of BaseCommand must be overrriden in any sub-class");
}
}
[MyCommand.as]
// -- no need to implement onFault in sub-class
public class MyCommand extends BaseCommand
{
public function execute( event:Event ):void
{
remoteObjectDelegate.doYourServerOperation(this);
}
override public function result(data:Object):void
{
trace("happily handling the data"); //without this override an error will be thrown so the developer will know to correct
}
}