gpt4 book ai didi

language-agnostic - 将 *interface* 或 *object* 作为参数传递给函数会更好吗?

转载 作者:行者123 更新时间:2023-12-04 07:44:55 25 4
gpt4 key购买 nike

我试图说服一位同事,函数应该将接口(interface)作为参数,而不是对象本身。我认为小对象可以很好地传递,但对于大对象,我会给它们一个接口(interface),只是传递 i/f,而不是全部。

请注意,这些大类中只会有一个 - i/f 永远不会用于不同的对象。这仅仅是为了隐藏对象的实现。

你同意将一个大类分成一个接口(interface)是好的做法吗?
这样做有什么缺点吗?

例子:

public interface class IVeryLargeClass
{
void DoSomething();
...
};

public ref class VeryLargeClass : public IVeryLargeClass
{
public:
virtual void DoSomething() { ... }
...
};

public ref class AnotherClass
{
public:
AnotherClass(VeryLargeClass^ vlc) { vlc->DoSomething(); }
// OR
AnotherClass(IVeryLargeClass^ vlc) { vlc->DoSomething(); }
};

最佳答案

您在 OO 开发中学到的首要原则之一:

Program to an interface, not an implementation.



您指出“这些大类中只会有一个 - i/f 永远不会用于不同的对象”。在你的情况下这可能是正确的,但我希望每次这样的陈述被证明是错误的时候我都能得到一分钱。

除了考虑你的接口(interface)是否可能有多个实现之外,你还应该考虑你的具体对象是否导出(或可能导出)与接口(interface)中声明的操作不共享逻辑亲和性的附加方法。在这种情况下,您可以简单地在一个或多个附加接口(interface)中声明附加操作。那么,客户端只需要与导出它感兴趣的操作的接口(interface)相结合。

简而言之,接口(interface)提供了一种管理客户端和提供者之间耦合的方法。

关于language-agnostic - 将 *interface* 或 *object* 作为参数传递给函数会更好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1003009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com