如果遇到诸如(过期用户,无效ID)之类的逻辑错误错误,那么告诉父方法此错误的最佳方法是什么
由于您希望父方法知道错误,因此在调用该方法之前您不确定它ID
是否有效并且User
未过期。GetUser
对?
如果您不确定传递给函数的参数是否有效,则使用异常是不合理的,您应该返回错误信息。
您可以以类似于 Scala、Go 和 Rust 语言所建议的更实用的方式返回错误信息。
创建一个泛型类以返回错误或值
public class Either(of ErrorType, ValueType)
public readonly Success as boolean
public readonly Error as ErrorType
public readonly Value as ValueType
public sub new(Error as ErrorType)
me.Success = False
me.Error = Error
end sub
public sub new(Value as ValueType)
me.Success = True
me.Value = Value
end sub
end class
创建您的函数可能具有的错误的枚举
public enum UserError
InvalidUserID
UserExpired
end enum
创建一个将用户 ID 作为参数并返回错误或用户的函数
function GetUser(ID as integer) as Either(of UserError, User)
if <business logic to find a user failed> then
return new Either(of UserError, User)(UserError.InvalidUserID)
end if
if <user expired> then
return new Either(of UserError, User)(UserError.UserExpired)
end if
return new Either(of UserError, User)(User)
end function
在调用者(父)方法中检查错误并应用业务逻辑
dim UserID = 10
dim UserResult = GetUser(10)
if UserResult.Success then
rem apply business logic to UserResult.Value
else
rem apply business logic to UserResult.Error
end if
注意:如果您使用异常重写此代码,您将获得完全相同数量的代码。