我应该使用类或方法来包装动态远程过程调用吗?

Jen*_*off 5 delphi oop rpc wrapper

情况

我想使RPC接口更容易使用.这是一个自定义界面,因此没有现成的包装器.

我必须围绕通常有许多参数的函数编写几个包装器.

可能的解决方案

解决方案1 ​​ - 为每个函数使用一个类:

TDoSomethingFunction = class
public
  property Arg1: Integer;
  property Arg2: string;
  property Arg3: Boolean;
  procedure Run;
end;
Run Code Online (Sandbox Code Playgroud)

调用者必须创建一个对象来调用该函数:

var
  DoSomething: TDoSomethingFunction;
begin
  DoSomething := TDoSomethingFunction.Create;
  try
    DoSomething.Arg1 := 0;
    ...
    DoSomething.Run;
  finally
  free;
end;
Run Code Online (Sandbox Code Playgroud)

方法2 - 为每个函数使用包装器方法:

procedure TRPCInterface.DoSomething(AArg1: Integer; AArg2: string; AArg3: Boolean);
Run Code Online (Sandbox Code Playgroud)

来电者可以简单地称之为:

TRPCInterface.DoSomething(0, ...);
Run Code Online (Sandbox Code Playgroud)

亲和反对

方法1 - 每个函数的类

反对

  • 需要更多代码.
  • 必须创建一个占用内存的对象.

  • 阅读代码更容易,您不必查看声明以查看参数是什么.

方法2 - 包装方法

反对

  • 您只能通过查看代码来判断使用哪些参数.

  • 编写的代码要少得多.
  • 包装器更薄(不需要创建任何对象).

我应该使用哪种方法?

use*_*947 2

有一个中间解决方案,即调用传递对象参数的包装器方法。

TDoSomethingArgs = class
public
  property Arg1: Integer;
  property Arg2: string;
  property Arg3: Boolean;
end;

procedure TRPCInterface.DoSomething(Args: TDoSomethingArgs);
Run Code Online (Sandbox Code Playgroud)

此方法的优点之一是您仍然使用方法,但仍然更具可读性。在参数中使用类(您也可以使用记录)的一个优点是您可以稍后更改参数(添加更多,更改行为),如果您选择得好,它不会破坏向后兼容性 - 总之您可以更改方法签名无需破坏代码。