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