Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

此 IPC 库的异常处理原则 #40

Open
walterlv opened this issue Oct 11, 2021 · 0 comments
Open

此 IPC 库的异常处理原则 #40

walterlv opened this issue Oct 11, 2021 · 0 comments

Comments

@walterlv
Copy link
Member

walterlv commented Oct 11, 2021

异常类型

  • IpcException 抽象异常,永远不应该抛出,只允许被 catch
    • IpcRemoteException 表示异常来自可正常连接并通信的其他端
      • IpcInvalidRemoteRequestException 当 IPC 收到来自其他端的请求时,此请求无法被理解
      • IpcInvalidRemoteResponseException 当 IPC 向其他端发起请求并收到其他端的响应后,此响应无法被理解
      • 具体被序列化和反序列化的异常 当其他端引发了异常,并通过 IPC 传过来时,此异常会被反序列化并重新抛出
      • IpcRemoteException 当其他端引发了异常,并通过 IPC 传过来时,如果此异常无法被反序列化,则抛出此异常
    • IpcConnectionException 表示 IPC 无法正常连接其他端,或连接被断开
    • IpcLocalException 表示异常发生在开始 IPC 通信之前或已完成 IPC 通信之后的本地,并且此异常表示 IPC 相关的错误(例如试图传输无法被序列化的类型等)

特别说明

框架内也可能会发生一些意料之外的异常。如果该异常发生在开始 IPC 通信之前或已完成 IPC 通信之后的本地,则应抛出 IpcLocalException,如果该异常发生在其他端但无法反序列化到本地,则抛出 IpcRemoteException

框架应该适当抛出使用错误的异常(例如 ArgumentNullExceptionInvalidOperationExceptionNotSupportedException 等),但不应该抛出实现异常(例如 InvaldCastExceptionNullReferenceException 等)。如果出现后者,能处理的应正确处理,不能处理的应抛出 IpcLocalExceptionIpcRemoteException

框架应正确处理 null 或 default,必须拥有正确的含义且不能与 IPC 传输的有意义的 null 或 default 混淆。

@walterlv walterlv changed the title 抛出异常的原则 此 IPC 库的异常处理原则 Oct 11, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant