none
Exception-Handling in Class Libraries RRS feed

  • Frage

  • Hi,

    beim Entwickeln einer Klassenbibliothek bin ich auf folgende Problematik gestoßen:

     

    Public Sub New(ByVal name as String)
     'was soll jetzt hier stehen?
     
     'Option 1
     
     If name = "" Then
      Throw New ArgumentException("argument must be a valid name", "name")
     End If
    
     'Option 2
    
     Try
      Me.Name = name
     Catch ex as ArgumentException
      Throw New ArgumentException(ex.Message, "name", ex)
     End Try
    
     'Option 3
    
     Me.Name = name 
     
    
    End Sub
    
    Public Property Name as String
     Get
      Return _Name
     End Get
     Set(ByVal value as String)
      If value = "" Then
       Throw New ArgumentException("argument must be a valid name", "value")
      End If
      
      _Name = value
    
     End Set
    End Property
    
    
    

    Problem bei Option 1: Wenn ich es so mache, dann wird der Parameter name bzw. value zwei Mal auf das gleiche überprüft. Ich glaube allerdings, dass das die beste Methode ist, da sie auch hier http://msdn.microsoft.com/en-us/library/ms229009(v=VS.100).aspx in Design Guidelines for Exceptions als Tester-Doer-Pattern empfohlen wird. 

     

    Problem bei Option 2: Wenn ich es so mache, dann fange ich ja noch in der selben Klasse mit Re-Throwing an. Allerdings steht in den oben genannten Richtlinien nichts dazu, wie und wann man re-throwen soll. Auf jeden Fall kann ich ja nicht den gleichen Fehler noch mal mit "Throw ex" werfen, da ja dann die argument Property dem Aufrufer der Sub New sinnlos erscheint (es steht value drin, aber er hat nur name übergeben). Das heißt ich dann schon eine neue Exception werfen.

     

    Problem bei Option 3: Gleiches wie 2: Die Argument Property ist dann nicht mehr sinnvoll.

     

    Wie geht ihr mit Exceptions um? Habt ihr noch andere Ideen?

     

    Freue mich auf eure Antoworten

     

    Momo

    Sonntag, 27. Februar 2011 14:29

Antworten