MST
星途 面试题库

面试题:Visual Basic反射与特性结合优化代码结构

在一个大型的Visual Basic项目中,存在许多业务逻辑方法。现在需要通过特性(Attribute)标记一些方法,用于特定的权限控制。例如,标记为`[AdminOnly]`特性的方法只有管理员角色能调用。请设计一个基于反射和特性的通用权限验证框架,要求该框架具有良好的扩展性和可维护性。请描述整体设计思路、关键类和方法的设计以及如何在实际项目中应用该框架。
15.7万 热度难度
编程语言Visual Basic

知识考点

AI 面试

面试题答案

一键面试

整体设计思路

  1. 定义特性:创建自定义特性类,如AdminOnlyAttribute,用于标记需要特定权限的方法。
  2. 权限验证逻辑:利用反射获取方法上标记的特性,根据特性判断当前用户是否具有相应权限。
  3. 扩展性:设计为可插拔式,方便添加新的权限特性和验证逻辑。
  4. 可维护性:将核心逻辑封装在独立的类中,便于修改和管理。

关键类和方法的设计

  1. 特性类
<AttributeUsage(AttributeTargets.Method)>
Public Class AdminOnlyAttribute
    Inherits Attribute
End Class
  1. 权限验证类
Public Class PermissionValidator
    Public Shared Function HasPermission(method As MethodInfo, userRole As String) As Boolean
        Dim attributes = method.GetCustomAttributes(True)
        For Each attr In attributes
            If TypeOf attr Is AdminOnlyAttribute AndAlso userRole <> "Admin" Then
                Return False
            End If
        Next
        Return True
    End Function
End Class

在实际项目中的应用

  1. 标记方法:在需要权限控制的方法上标记特性,如:
Public Class SomeBusinessLogic
    <AdminOnly>
    Public Sub AdminOnlyMethod()
        '方法逻辑
    End Sub
End Class
  1. 调用验证:在调用方法前进行权限验证:
Dim methodInfo = GetType(SomeBusinessLogic).GetMethod("AdminOnlyMethod")
Dim hasPermission = PermissionValidator.HasPermission(methodInfo, currentUserRole)
If hasPermission Then
    Dim instance = New SomeBusinessLogic()
    instance.AdminOnlyMethod()
Else
    '提示用户无权限
End If