3层架构中的事件和例外

时间:2017-08-02 09:54:24

标签: vb.net exception-handling architecture event-handling layer

我还有另一个考虑事件和例外的问题

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

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

我现在想要从此类引发事件和/或捕获异常以通知用户并记录异常。有3个事件:" ErrorLoad"," ErrorWrite"," Ready"

findstr /I /R /C:"\<%string%\>" "%log_path%\%latest%" > "error_log.txt"

结束班

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

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()

这很好用,但现在我想通知用户发生错误,所以我想提出一个名为&#34; ErrorLoad&#34; (在clsCSV中)并在我的BLL中捕捉到它。但那我该怎么办?添加一个处理此事件的子,然后在GUI中引发BLL中的事件?或者这是一个很长的路要走?

我也想为其他事件做这件事。但是分层架构中的整个事件系统有点令人困惑。

任何可以开导我的人? 提前谢谢!

1 个答案:

答案 0 :(得分:0)

在不知道用户界面的实施细节的情况下,我只能给你一些一般的建议。

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

因此BLL引发了一个事件并且GUI正在侦听。基本上只有通知GUI它必须从BLL检查特定属性或功能或类似的任务的任务。其余部分由GUI完成,并通知用户。

我不会使用例外。这些是处理特定功能的错误路径。一旦你的BLL注意到错误并为UI处理做好准备就完成了这条路径。