Cairngorm Fault Handler - PullRequest
       30

Cairngorm Fault Handler

1 голос
/ 29 марта 2011

В соответствии с архитектурой Cairngorm у нас всегда есть обработчик ошибок в каждом классе команд для каждой службы.

Как мы можем создать один класс для обработки события обработчика ошибок для всех служб.

Ответы [ 2 ]

1 голос
/ 29 марта 2011

Под "всегда есть обработчик ошибок" вы подразумеваете под контрактом, как при реализации интерфейса?

Вы можете написать базовый класс команд, который расширяет все остальные классы команд. База может реализовать обработчик ошибок, а все другие подклассы могут по желанию переопределить его.

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 
    {

    }
}
1 голос
/ 29 марта 2011

Создайте базовый класс, из которого вы расширяете все остальные классы, поместите туда обработчик ошибок.Например: FaultHandlerCairngormCommand расширяет SequenceCommand и реализует 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
    }
}
...