Dovrei usare un motivo di progettazione per creare questi oggetti?

0

Ho un sacco di codice duplicato nel mio programma che fondamentalmente segue questa struttura:

If condition is true
    Create ErrorRecord object
    Call ThrowTerminatingError(error object)
End if

La struttura di questo codice è esattamente la stessa per ogni istanza, uno dei due parametri è diverso. Quindi per esempio questo fa parte di uno dei miei metodi

protected void ProcessRecord()
{
    ...

    var login = PrivateFunctions.GetLogin(samAccountName);

    if (login == null)
    {
        var errorRecord = new ErrorRecord(
            new NullReferenceException($"A login for the user account '{samAccountName}' does not exist in the database."),
            "LoginNotFound",
            ErrorCategory.ObjectNotFound,
            login);

        ThrowTerminatingError(errorRecord);
    }

    var user = PrivateFunctions.GetUser(login);

    if (user == null)
    {
        var errorRecord = new ErrorRecord(
            new NullReferenceException($"A user for the login '{login.Name}' does not exist in the database."),
            "UserNotFound",
            ErrorCategory.ObjectNotFound,
            user);

        ThrowTerminatingError(errorRecord);
    }
   ...
}

Penso che potrei creare un metodo statico con parametri per creare l'oggetto ErrorObject e inizializzarlo come richiesto. Ad esempio:

static internal ErrorObject CreateUserError(Login login)
{
    return new ErrorRecord(
        new NullReferenceException($"A user for the login '{login.Name}' does not exist in the database."),
        "UserNotFound",
        ErrorCategory.ObjectNotFound,
        user);
}

E poi usato:

ThrowTerminatingErrorRecord(StaticClass.CreateUserError(login));

Esiste un modello di progettazione che potrei utilizzare oppure esiste un approccio migliore?

Modifica: In risposta al primo commento, questo è ciò che accade se lancio un'eccezione anziché costruire il record di errore:

Calling ThrowTerminatingError:

Get-DatabaseUserInformation : "A login for the user account 'domain\username' does not exist in the database."
+ Get-DatabaseUserInformation <<<<
    + CategoryInfo          : ObjectNotFound: (:) [Get-DatabaseUserInformation], Exception
    + FullyQualifiedErrorId : "LoginNotFound",Module.Cmdlet

Lancio di un'eccezione:

Get-DatabaseUserInformation : An exception was thrown.
+ get-databaseuser <<<<
    + CategoryInfo          : NotSpecified: (:) [Get-DatabaseUserInformation], Exception
    + FullyQualifiedErrorId : System.Exception,Module.Cmdlet
    
posta Jake 06.10.2015 - 15:55
fonte

0 risposte

Leggi altre domande sui tag