Classes associadas e Factory method pattern
O uso de validação de formulários do lado do cliente é uma pratica muito comum em aplicações web, para não haver inconsistência nos dados quando forem enviados para a base de dados.
Bem, esses dias em visita a um dos nossos clientes deparei com um problema que ele estava tendo com validação de uma classe extendida do TextInput. Só que essa nova classe seria base para outras classes de Input do sistema, que necessitavam de validação para números, data, hora ou qualquer outro campo de inserção de dados. A solução encontrada foi bem simples, porém bem interessante, pois sempre estamos usando classes associadas como TextInput e Validator. Então porque não utilizamos uma class TextInput que já contenha o Validator e deixamos subclasses decidirem qual classe instanciar do validator? Isso mesmo, este é o conhecido Factory method pattern.
Veja com ficou o diagrama de classes:
-
package tiv
-
{
-
import flash.events.Event;
-
-
import mx.controls.TextInput;
-
import mx.events.ValidationResultEvent;
-
import mx.validators.Validator;
-
-
public class TextInputValidator extends TextInput
-
{
-
public function TextInputValidator():void
-
{
-
this.validator = new Validator();
-
}
-
-
private var _validator : Validator;
-
protected function set validator(value:Validator):void
-
{
-
value.requiredFieldError = "Campo requerido";
-
value.source = this;
-
value.property = "text";
-
value.required = false;
-
-
_validator = value;
-
-
this.addEventListener(Event.CHANGE , function(event:Event):void
-
{validate();} );
-
}
-
-
protected function get validator():Validator
-
{
-
return _validator;
-
}
-
-
[Inspectable(category="General", defaultValue="false")]
-
public function set required(value:Boolean):void
-
{
-
this.validator.required = value;
-
}
-
-
public function get required():Boolean
-
{
-
return validator.required;
-
}
-
-
public function validate():Boolean
-
{
-
return validator.validate().type == ValidationResultEvent.VALID;
-
}
-
-
public function clear():void
-
{
-
//esse eh para que quando limparmos o campo ele nao ficar cem vermelho.
-
var _required : Boolean = this.required;
-
this.required = false;
-
-
this.text = "";
-
this.validate();
-
-
this.required = _required;
-
}
-
}
-
package tiv
-
{
-
import mx.validators.EmailValidator;
-
import tiv.TextInputValidator;
-
-
public class TextInputEmailValidator extends TextInputValidator
-
{
-
public function TextInputEmailValidator():void
-
{
-
this.validator = new EmailValidator();
-
}
-
-
}
-
}
-
<p class="western" style="margin-bottom: 0cm;" align="left">[/code]</p>
-
-
<p class="western" style="margin-bottom: 0cm;" align="left">[code]package tiv
-
{
-
import mx.validators.DateValidator;
-
import tiv.TextInputValidator;
-
-
public class TextInputDateValidator extends TextInputValidator
-
{
-
public function TextInputDateValidator():void
-
{
-
this.validator = new DateValidator();
-
-
}
-
-
public function set inputFormat(value:String):void
-
{
-
DateValidator(this.validator).inputFormat = value;
-
}
-
-
public function get inputFormat():String
-
{
-
return DateValidator(this.validator).inputFormat;
-
}
-
-
}
-
package tiv
-
{
-
import mx.validators.NumberValidator;
-
import tiv.TextInputValidator;
-
-
public class TextInputNumberValidator extends TextInputValidator
-
{
-
public function TextInputNumberValidator():void
-
{
-
this.validator = new NumberValidator();
-
this.restrict = "[0-9]";
-
}
-
-
public function set maxValue(value:Object):void
-
{
-
NumberValidator(this.validator).exceedsMaxError = "o numero excedeu o valor maximo : " + value;
-
NumberValidator(this.validator).maxValue = value;
-
}
-
-
public function get maxValue():Object
-
{
-
return NumberValidator(this.validator).maxValue;
-
}
-
-
public function set minValue(value:Object):void
-
{
-
NumberValidator(this.validator).lowerThanMinError = "o numero eh menor que o valor minimo : " + value;
-
NumberValidator(this.validator).minValue = value;
-
}
-
-
public function get minValue():Object
-
{
-
return NumberValidator(this.validator).minValue;
-
}
-
}
Veja como ficou:
2 comentários para “Classes associadas e Factory method pattern”
Parabens, Filipe. Ontem usei suas classes e são show de bola. São facil de usar e modificar para casos especificos.
Obrigado por ter compartilhado isto.
mto legal essa estrtura….
Adicionar comentário
Parabens, Filipe. Ontem usei suas classes e são show de bola. São facil de usar e modificar para casos especificos.
Obrigado por ter compartilhado isto.
mto legal essa estrtura….


