Tuesday, November 10, 2009

Jeg følger løbende med i Scott Mitchells Toolbox Column (se hans blog), og i november henviste han til et open source projekt kaldet CuttingEdge.Conditions. Det har jeg kigget lidt på, og overvejer kraftigt om vi i et kommende projekt skal implementere det i næste projekt i en eller anden form.

Du kan selv læse om mulighederne fra projektets site, men meget kort handler det om at kunne teste argumenter og returværdier på en nem måde. Se eksempelvis følgende kode hvor argumenter testes på den traditionelle måde:

void TheOldFashionWay(int id, IEnumerable<int> collection, DayOfWeek day)
{
    if (id < 1)
    {
        throw new ArgumentOutOfRangeException("id", String.Format(
            "id should be greater than 0. The actual value is {0}.", id));
    }
    if (collection == null)
    {
        throw new ArgumentNullException("collection",
            "collection should not be empty");
    }
    if (collection.Count() == 0)
    {
        throw new ArgumentException("collection should not be empty",
            "collection");
    }
    if (day >= DayOfWeek.Monday && day <= DayOfWeek.Friday)
    {
        throw new InvalidEnumArgumentException(String.Format(
            "day should be between Monday and Friday. " +
            "The actual value is {0}.", day));
    }

    // Do method work
}

Denne kode kan konverteres til følgende som benytter Conditions-projektet:

void TheConditionsWay(int id, IEnumerable<int> collection, DayOfWeek day)
{
    Condition.Requires(id, "id").IsGreaterThan(0);
    Condition.Requires(collection, "collection").IsNotEmpty();
   Condition.Requires(day, "day").IsInRange(DayOfWeek.Monday,
DayOfWeek.Friday);

    // Do method work
}

Koden taler for sig selv, og er i øvrigt klippet råt fra denne artikel fra CodeProjekt hvor der også er yderligere informationer om projektet.

Med projektet følger også codesnippets til VS som gør det endnu nemmere at bruge funktionaliteten.

Jeg har ikke brugt det i et større omfang, men jeg syntes som nævnt at det ser spændende ud.

posted on Tuesday, November 10, 2009 11:05:45 AM (Romance Standard Time, UTC+01:00)  #    Comments [0]