Я пишу библиотеку классов, которая включает драйвер USB-устройства.
Это устройство имеет собственную библиотеку классов, предоставленную поставщиком оборудования.
Очень часто, особенно если вы работаете со старыми сборками DLL или COM, существуют методы (правильные функции), которые возвращают TRUE, если все было в порядке, или FALSE, если происходит какая-либо ошибка.
Часто эти методы возвращают информацию об ошибке в одном из своих параметров или отдельно в методе GetLastError или даже в событии OnError.
Теперь, как правило, я обрабатываю все собственные .NET-исключения в моей библиотеке libray, обрабатывая ее локально или повторно отправляя клиенту, если об ошибке полезно знать. Но что делать со всеми другими ошибками, которые скрыты в методах вендора? (в истинном случае у меня нет исключений, а только возвращены значения ИСТИНА или ЛОЖЬ).
Давайте сделаем пример с методом «CONNECT», который подключает клиента к USB-устройству.
Я конвертирую метод следующим образом:
Public Sub Connect()
oVendorDevice.connect()
End Sub
теперь, если произошла какая-либо ошибка соединения, метод соединения поставщика возвращает FALSE.
Но я не знаю, почему не удалось установить соединение. Чтобы узнать, почему не удалось установить соединение, я должен вызвать (например) метод GetLastError, который дает мне информацию об ошибке.
(но не забывайте, что другие поставщики используют другие стратегии, например, возвращают ошибку в параметре метода или в событиях OnError.
Теперь, чтобы следовать хорошей стратегии обработки исключений .NET, я мог бы написать что-то вроде этого:
Public Sub Connect()
Dim res As Boolean = oVendorDevice.connect()
If res = False Then
Dim sError As String = oVendorDevice.GetLastError
Throw New Exception(sError) 'or a my own exception class
End If
End Sub
Но я мог бы также сохранить стратегию вендора с помощью чего-то вроде
Public Function Connect2(ByRef Err As String) As Boolean
Connect2 = oVendorDevice.connect()
Err = oVendorDevice.GetLastError
End Function
или как это
Public Function Connect3() As Boolean
Connect3 = oVendorDevice.connect()
MyGetLastError = oVendorDevice.GetLastError
End Function
Какой лучший .NET-способ "обернуть ошибки" в библиотеке классов вендора?