我是这样利用异常的(解耦)——你不知道异常的那些事(二)

本文将通过实例演示如何在编程中使用异常处理,包括如何减少业务逻辑层和UI层的耦合,以及如何利用异常处理来简化错误处理流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        刚刚正权童鞋跟我抱怨说我上篇讲异常只有文字,一点例子也没有。那么这篇我就失信一下,先不对比用异常所消耗的时间,在这再给大家卖个关子。

        下面我就开始给大家做一个DEMO来说明一下我对异常的使用。

        首先要说的是我认为是内容耦合的那个例子,大家请看代码,我尽量简单的说(由于是为了让大家看懂,所以我就用汉语标识我要干什么,大家理解哈,嘻嘻。

        业务逻辑层的代码:

    Public Function Login() As String

        If 用户不存在 Then
            Return "用户不存在"
        End If

        If 密码不正确 Then
            Return "密码不正确"
        End If

        If 登陆成功 Then
            Return "登陆成功"
        End If

    End Function

        UI层的代码

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLogIN.Click
        Select Case BLL.Login()

            Case "用户不存在"
                执行A计划()

            Case "密码不正确"
                执行B计划()

            Case "登陆成功"
                执行C计划()

            Case Else
                撕票()

        End Select
    End Sub

        这样,UI层就不得不需要去清楚BLL层返回的到底是什么字符串,当然,这样其实也不能说不可以。在文档里面标注清楚也是完全可以的。但是UI层和BLL层的耦合,这就不多说了。

        下面看一下这样的代码:

        BLL层的代码:        

    Public Function Login() As Boolean

        If 用户不存在 Then
            Throw New Exception("用户不存在")
        End If

        If 密码不正确 Then
            Throw New Exception("密码不正确")
        End If

        If 登陆成功 Then
            Throw New Exception("登陆成功")
        End If

    End Function
        UI层的代码:        

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLogIN.Click


        Try
            If BLL.Login() Then
                登陆成功()
            End If
        Catch ex As Exception
            MsgBox(ex.Message)
            Exit Sub
        End Try


    End Sub
        这样,在UI层只是调用了一下BLL层的代码。以上就是我对于异常的利用,当然,异常还有别的用处,等待大家去发现。
        关于异常的利用,我就说到这吧。下篇将继续咱们的话题,进行个异常处理到底能用我们多长时间?


### 功能安全软硬件解耦框架图与架构图解析 在车载计算平台的功能安全设计中,软硬件解耦是一个核心概念。它旨在通过分离软件和硬件的设计与开发流程来提高系统的灵活性、可维护性和安全性[^2]。以下是关于功能安全软硬件解耦的相关框图和架构图的关键点: #### 1. **软硬件解耦的核心理念** 软硬件解耦的目标是减少两者之间的依赖性,使得软件可以在同的硬件平台上运行而无需大量修改。这种设计理念通常采用分层架构的方式实现,其中每一层都有明确的责任划分。例如,在AUTOSAR CP(Classic Platform)中,应用层(ASW)、运行时环境(RTE)和基础软件层(BSW)构成了典型的三层结构。 - **应用层 (Application Layer)** 提供具体的业务逻辑处理能力,如电机控制算法或传感器数据融合等。 - **运行时环境 (Runtime Environment, RTE)** 实现了上下层间的抽象化通信机制,屏蔽了底层细节,使高层能够专注于功能性需求而必关心其实现方式[^2]。 - **基础软件层 (Basic Software Module, BSW)** 主要负责驱动管理、网络协议栈支持以及操作系统服务等功能,直接面向硬件资源操作。 这些层次之间通过标准化接口(APIs)连接起来,从而降低了彼此间的粘连程度并增强了重用可能性。 #### 2. **功能安全中的软硬件解耦** 对于满足ISO 26262标准的功能安全要求而言,软硬件解耦尤为重要。这是因为只有当两部分充分独立之后才能更好地评估各自的失效模式及其潜在危害,并采取针对性措施加以缓解。典型的做法是在系统级建立专门的安全监控模块(Safety Monitor),用于检测异常情况并向其他组件报告错误状态;同时还需要制定详尽的诊断策略以确保即使发生故障也能维持基本水平的操作性能[^1]。 此外,考虑到现代汽车日益增长的数据吞吐量及复杂度,许多新型解决方案引入了虚拟机(VM)或者容器(Containerization)技术作为额外屏障进一步强化隔离效果。这种方法允许在同一物理设备之上部署多个相互独立的工作负载实例,进而简化了跨域协作的同时也加强了防护力度。 #### 3. **推荐的架构图样式** ##### (1)传统 AUTOSAR 结构 这是最常见的一种形式,展示了如何利用前述提到过的三个主要组成部分构建起完整的嵌入式控制系统蓝图。如下所示: ```plaintext +-------------------+ | Application | | SW |<---- User Defined Logic +-------------------+ ↓ +-------------------+ | Runtime | | Environmental API |<---- Abstraction Layer Between Upper & Lower Levels +-------------------+ ↓ +-------------------+ | Basic Software Mod| | ule |<---- Hardware Interaction Handlers +-------------------+ ↓ +-------------------+ | Physical Hardware | +-------------------+ ``` ##### (2)增强型多核处理器布局 随着算力需求激增,越来越多的新车型开始配备高性能MCUs甚至SoCs来承担更繁重的任务负荷。此时则可能涉及到更为复杂的拓扑关系,比如下面这个例子就体现了主从节点配合工作的情形: ```plaintext +---------------+ +-------------+ +--------------+ | Primary Core A|------->| Secondary Cores|<-----| Peripheral Devices| | (Safety Critical)| | Non-Safety Related Tasks| | Sensors / Actuators etc. +---------------+ +-------------+ +--------------+ ``` 在此种情况下,除了常规意义上的分区之外还特别强调了针对同优先级别的区分对待原则——即将那些关乎人身财产保障的重要运算集中安排到单独指定区域执行以便获得最高级别保护待遇。 --- ###
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值