Public Class ValidationResult
    Private Shared ReadOnly _success As New ValidationResult(True)

    ''' <summary>
    '''     Hata mesajlarını alan başarısızlık yapıcısı
    ''' </summary>
    ''' <param name="errors"></param>
    Public Sub New(ParamArray errors As String())
        Me.New(CType(errors, IEnumerable(Of String)))
    End Sub

    ''' <summary>
    '''     Hata mesajlarını alan başarısızlık yapıcısı
    ''' </summary>
    ''' <param name="errors"></param>
    Public Sub New(errors As IEnumerable(Of String))
        If errors Is Nothing Then
            errors = New String() {"Bir hata ile karşılaşıldı."}
        End If
        Succeeded = False
        Me.Errors = errors
    End Sub

    ''' <summary>
    ''' Sonucun başarılı olup olmadığını alan yapıcı
    ''' </summary>
    ''' <param name="success"></param>
    Protected Sub New(success As Boolean)
        Succeeded = success
        Errors = New String() {}
    End Sub

    ''' <summary>
    '''     İşlem başarılıysa doğrudur
    ''' </summary>
    Public Property Succeeded As Boolean

    ''' <summary>
    '''     Hata listesi
    ''' </summary>
    Public Property Errors As IEnumerable(Of String)

    ''' <summary>
    '''     Statik başarı sonucu
    ''' </summary>
    ''' <returns></returns>
    Public Shared ReadOnly Property Success As ValidationResult
        Get
            Return _success
        End Get
    End Property

    ''' <summary>
    '''     Başarısız yardımcı yöntem
    ''' </summary>
    ''' <param name="errors"></param>
    ''' <returns></returns>
    Public Shared Function Failed(ParamArray errors As String()) As ValidationResult
        Return New ValidationResult(errors)
    End Function
End Class