Blink: Clase abstracta BlinkTask

BlinkTask definirá el comportamiento en cada una de las clases que utilicen a BlinkTask como su clase Base.

Constará de una propiedad (WorkingDirectory) en la cual se definirá la ruta hacia la carpeta que se estará usando como la carpeta de trabajo, dos métodos abstractos (LoadConfiguration, DoTask), un método virtual (ValidateDomain) y un método publico (Start). En donde el metódo publico realizará la ejecución de los dos métodos abstractos y el método vistual en el siguiente orden:

ValidateDomain -> LoadConfiguration -> DoTask

Los métodos abstractos deberán ser sobrescritos por la clase que utilice a BlinkTask como clase base. 🙂

BlinkTask.cs

using System;
using System.Text.RegularExpressions;
using System.IO;

namespace BlinkLib
{
    public abstract class BlinkTask
    {

        public string WorkingDirectory { get; set; }

        protected virtual void ValidateDomain()
        {
            if (String.IsNullOrWhiteSpace(this.WorkingDirectory))
                throw new ArgumentNullException("La propiedad WorkingDirectory se encuentra vacía.");

            Regex containsABadCharacter = new Regex(
                "[" + Regex.Escape(new string(Path.GetInvalidPathChars())) + "]");

            if (containsABadCharacter.IsMatch(this.WorkingDirectory))
                throw new FormatException(String.Format("La propiedad WorkingDirectory \"{0}\" tiene caracteres no válidos para una ruta.", this.WorkingDirectory));

            if (!Directory.Exists(this.WorkingDirectory))
                throw new DirectoryNotFoundException(String.Format("La ruta especificada para la propiedad WorkingDirectory \"{0}\" no existe", this.WorkingDirectory));
        }
        protected abstract void LoadConfiguration();
        protected abstract void DoTask();

        public void Start()
        {
            try
            {
                ValidateDomain();
            }
            catch (Exception ex)
            {
                throw new BlinkException("ValidateDomain", ex);
            }

            try
            {
                LoadConfiguration();
            }
            catch (Exception ex)
            {
                throw new BlinkException("LoadConfiguration", ex);
            }

            try
            {
                DoTask();
            }
            catch (Exception ex)
            {
                throw new BlinkException("DoTask", ex);
            }
        }
    }
}

BlinkException es una clase propia que hereda de Exception, esta clase me servirá para determinar en que parte del flujo de la tarea se ha generado la excepción.

BlinkException.cs

public class BlinkException : Exception
{
    public BlinkException(String message) : base(message){ }

    public BlinkException(String message, Exception inner) : base(message, inner) { }
}

La clase BlinkException posee dos constructures, uno recibe como parámetro un mensaje y el segundo constructor recibe un mensaje y una excepción, la excepción será utilizada como excepción interna. Es decir, puedo utilizar el Mensaje como el contenido amigable de la excepción, y la excepción interna como el detalle técnico de la excepción original.


Icono Lightbulb por Recep Kütük

One thought on “Blink: Clase abstracta BlinkTask”

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

w

Conectando a %s