2010-09-28 4 views
0

Y a-t-il quelqu'un qui utilise la classe Guard fournie par Microsoft dans son projet open source CompositeUI Application Block? J'ai remarqué que, dans la classe Guard, il n'y a que quelques méthodes pour valider le paramètre argument. Mais comme nous le savons tous, dans nos propres codes, il peut y avoir de nombreux cas qui ont besoin de valider une autre variable (qui n'est pas un paramètre d'argument) ou un membre, et rejeter une exception si la validation échoue. Dans ce cas, pourquoi la classe Garde ne fournit-elle pas de classe d'aide pour aider à faire cela?Question sur la classe Guard dans le bloc d'application CompositeUI de Microsoft

est Ci-dessous les codes de classe Guard:

//=============================================================================== 
// Microsoft patterns & practices 
// CompositeUI Application Block 
//=============================================================================== 
// Copyright Microsoft Corporation. All rights reserved. 
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY 
// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT 
// LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
// FITNESS FOR A PARTICULAR PURPOSE. 
//=============================================================================== 

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Globalization; 

namespace Microsoft.Practices.CompositeUI.Utility 
{ 
/// <summary> 
/// Common guard clauses 
/// </summary> 
public static class Guard 
{ 
    /// <summary> 
    /// Checks a string argument to ensure it isn't null or empty 
    /// </summary> 
    /// <param name="argumentValue">The argument value to check.</param> 
    /// <param name="argumentName">The name of the argument.</param> 
    public static void ArgumentNotNullOrEmptyString(string argumentValue, string argumentName) 
    { 
    ArgumentNotNull(argumentValue, argumentName); 

    if (argumentValue.Length == 0) 
    throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, Properties.Resources.StringCannotBeEmpty, argumentName)); 
    } 

    /// <summary> 
    /// Checks an argument to ensure it isn't null 
    /// </summary> 
    /// <param name="argumentValue">The argument value to check.</param> 
    /// <param name="argumentName">The name of the argument.</param> 
    public static void ArgumentNotNull(object argumentValue, string argumentName) 
    { 
    if (argumentValue == null) 
    throw new ArgumentNullException(argumentName); 
    } 

    /// <summary> 
    /// Checks an Enum argument to ensure that its value is defined by the specified Enum type. 
    /// </summary> 
    /// <param name="enumType">The Enum type the value should correspond to.</param> 
    /// <param name="value">The value to check for.</param> 
    /// <param name="argumentName">The name of the argument holding the value.</param> 
    public static void EnumValueIsDefined(Type enumType, object value, string argumentName) 
    { 
    if (Enum.IsDefined(enumType, value) == false) 
    throw new ArgumentException(String.Format(CultureInfo.CurrentCulture, 
    Properties.Resources.InvalidEnumValue, 
    argumentName, enumType.ToString())); 
    } 

    /// <summary> 
    /// Verifies that an argument type is assignable from the provided type (meaning 
    /// interfaces are implemented, or classes exist in the base class hierarchy). 
    /// </summary> 
    /// <param name="assignee">The argument type.</param> 
    /// <param name="providedType">The type it must be assignable from.</param> 
    /// <param name="argumentName">The argument name.</param> 
    public static void TypeIsAssignableFromType(Type assignee, Type providedType, string argumentName) 
    { 
    if (!providedType.IsAssignableFrom(assignee)) 
    throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, 
    Properties.Resources.TypeNotCompatible, assignee, providedType), argumentName); 
    } 
} 
} 

Répondre

0

Le but de la classe Guard est de tester des arguments avant qu'ils ne soient utilisés.

Par exemple:

public void Store(string ImageName, Image Image) 
{ 
    Guard.ArgumentNotNullOrEmptyString(ImageName, Resources.ImageName); 
    Guard.ArgumentNotNull(Image, Resources.Image); 

    LocalStore(ImageName, Image); 

    if (NextStore != null) 
    { 
     NextStore.Store(ImageName, Image);   
    } 
} 

Ainsi, les déclarations de garde veillent à ce que les deux paramètres sont conformes aux hypothèses du corps de la méthode.

Remarque: Si vous ne souhaitez pas utiliser le modèle Garde, vous devez probablement fournir un exemple (code ou description) de ce que vous essayez d'obtenir plutôt que d'afficher le code de la classe Guard.