【发布时间】: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 很感兴趣,我用一些用例更新了问题