3 层体系结构中的事件和异常



我还有另一个问题考虑事件和异常

对我的项目进行一个小介绍:我在 3 层架构中工作,所以我有一个 GUI(表单(、BLL(业务逻辑层(和一个 DAL(数据访问层(。

所以我的 GUI 链接到连接到多个 DAL 类的 BL。例如,我的 BLL 有一个类 clsCSV(它读取和写入 CSV 文件(

我现在想引发事件和/或捕获此类中的异常,以通知用户并记录异常。有 3 个事件:"错误加载"、"错误写入"、"就绪">

Public Class clsCSV
Public Sub New()
End Sub
Public Function Load(sFilePath As String)
Dim oFileHelper As New DelimitedFileEngine(Of clsItem)
Dim oList As New List(Of clsItem)
' Load a CSV file
Try
oList = oFileHelper.ReadFileAsList(sFilePath)
Catch ex As Exception
'RaiseEvent ErrorLoad("")
clsErrorLog.Log(ex)
Finally
End Try
' If the list is empty return nothing
If Not IsNothing(oList) Then
Return oList
Else
Return Nothing
End If

End Function
Public Sub Write(sFilePath As String, oList As List(Of clsTranslatedItem))
Dim oFileHelper As New DelimitedFileEngine(Of clsTranslatedItem)
oFileHelper.WriteFile(sFilePath, oList)
RaiseEvent Ready()
End Sub
Public Event ErrorLoad(ByVal sender As Object, ByVal e As EventArgs)
Public Event ErrorWrite(sMessage As String)
Public Event Ready()

结束类

在我的公共子加载中有一个 try-catch,它捕获任何异常并通过调用 clsErrorLog.log(ex( 将其记录到文本文件中,然后调用此类并记录错误:

Public Shared Sub Log(ex As Exception)
Try
Dim oBestand As New System.IO.StreamWriter(My.Computer.FileSystem.SpecialDirectories.Desktop & "ErrorLog.txt", True)
If Not IsNothing(oBestand) Then
oBestand.WriteLine("")
oBestand.WriteLine(My.Computer.Clock.LocalTime.ToString)
oBestand.WriteLine(ex.Message)
oBestand.WriteLine(ex.StackTrace)
oBestand.WriteLine("_________________________________________")
oBestand.Close()
End If
Catch exc As Exception
End Try
End Sub

这工作正常,但现在我想通知用户发生了错误,所以我正在考虑引发一个名为"ErrorLoad"(在 clsCSV 中(的事件并在我的 BLL 中捕获它。但是我该怎么办呢?添加一个处理此事件的 sub,然后在 BLL 中引发一个事件,被 GUI 捕获?还是说,这还有很长的路要走?

我也想为场外的其他事件这样做。但是分层架构中的整个事件系统有点混乱。

有谁能开导我? 提前感谢!

在不知道你的UI的实现细节的情况下,我只能给你一些一般性的建议。

您需要在GUI和BLL之间进行某种双向通信。例如,在 WPF 中,这通常是使用INotifyPropertyChanged接口及其定义的事件来完成的。

因此,BLL 引发一个事件,GUI 正在侦听。基本上只有通知GUI它必须从BLL检查特定属性或功能或类似内容的任务。其余的由 GUI 执行此操作并通知用户。

我不会使用例外来做到这一点。这些用于处理特定函数的错误路径。一旦 BLL 注意到错误并为 UI 处理做好准备,就会完成此路径。

最新更新