【问题标题】:Method return interface [duplicate]方法返回接口
【发布时间】:2021-02-05 05:08:43
【问题描述】:

用接口编码很好,但是有返回接口的方法是一个好习惯吗?

function CallWebService; IWebServiceReturn;

这样我就不需要释放方法的结果并防止内存泄漏。

有人说没用,需要保留服务,生成更多代码(接口单元,实现单元),而不是只有一个类(或记录):

function CallWebService; TWebServiceReturn;

例如我可以有这个接口,使用我所有的结果方法:

IReturn = interface
  procedure GetResult : boolean;
  function SetResult(aResult: boolean);
  property Result: boolean read GetResult write SetResult;
end;

我就是这样用的:

var
  Return: IReturn;
begin
  Result := ProcessMessage(CurrentMessage);
  // ...

在特殊调用中,我可能需要在结果中包含更多数据,因此我将创建一个新接口:

IWebServiceReturn = interface(IReturn)
  procedure GetJson : string;
  function SetJson(aJson: string);
  property Json: string read GetJson write SetJson;
end;

我会这样使用:

var
  Return: IWebServiceReturn;
begin
  Result := CallWebService(Path);
  // ...

如果以后,一个新的调用需要得到其他东西,我也会创建一个接口和类实现。

在这一点上,我们对团队的看法不同。 一些开发人员认为这是在浪费时间,这会使代码复杂化。

显然他们更喜欢这样做:

function CallWebService(Path: string; var Json: string): boolean;

如果您想要更多数据,则需要更改方法签名..

代码耦合太少我认为总是使用记录或类更好,如果我们想创建 SOLID 代码,这种抽象是必要的。

【问题讨论】:

  • stackoverflow.com/questions/1992384/… 看看这个可能会有所帮助
  • 不使用界面就没有意义了。
  • 你的问题搞得一团糟。您对 Java 或 Delphi 感兴趣吗?一般的 OOP 原则是相同的,但 Delphi 中的接口是更复杂的主题,并且除了 OOP 之外还有不同的原因,您为什么要使用它们或者为什么它们会是不好的选择。如果您可以详细说明您的用例,它可能会有所帮助。特别是您的对象的生命周期、创建新实例的频率、是否为共享对象...
  • 我对 Delphi 很感兴趣,我用一些用例更新了问题

标签: oop delphi interface


【解决方案1】:

当一个方法可以返回不同的实现时,我认为这是正确的方法,比如在工厂设计模式中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 2016-03-15
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-09
    相关资源
    最近更新 更多