gpt4 book ai didi

c++ - C++ API 中的渐进式披露

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:43:02 24 4
gpt4 key购买 nike

在我阅读文章 Programmers Are People Too 之后由 Ken Arnold 撰写,我一直在尝试在最小的 C++ API 中实现渐进式公开的想法,以了解如何在更大范围内实现它。

渐进式公开是指将 API“拆分”为多个类别的想法,这些类别仅根据请求向 API 用户公开。例如,API 可以分为两类:基本类别(默认情况下用户可以访问)用于经常需要且易于使用的方法,扩展类别用于专家级服务。

我在网络上只找到一个这样的例子:db4o库(在 Java 中),但我不太了解他们的策略。例如,如果我们看一下 ObjectServer ,它被声明为一个接口(interface),就像它的扩展类 ExtObjectServer .然后是一个实现 ObjectServerImpl定义了从这两个接口(interface)继承的类,并在那里实现了两个接口(interface)的所有方法。

这应该允许这样的代码:

public void test() throws IOException {
final String user = "hohohi";
final String password = "hohoho";
ObjectServer server = clientServerFixture().server();
server.grantAccess(user, password);

ObjectContainer con = openClient(user, password);
Assert.isNotNull(con);
con.close();

server.ext().revokeAccess(user); // How does this limit the scope to
// expert level methods only since it
// inherits from ObjectServer?

// ...
});

我对 Java 的了解不是很好,但似乎我对这项工作的更高层次有误解。

感谢您的帮助!

最佳答案

Java 和 C++ 都是静态类型的,因此您可以对对象执行的操作在很大程度上取决于其实际的动态类型,而取决于您访问它所通过的类型。

在您展示的示例中,您会注意到变量 server 的类型为 ObjectServer。这意味着当通过 server 时,您只能访问 ObjectServer 方法。即使该对象恰好属于具有其他方法的类型(在您的情况及其 ObjectServerImpl 类型中就是这种情况),您也无法直接访问 ObjectServer< 以外的方法 一个。

要访问其他方法,您需要通过不同的类型来获取对象。这可以通过强制转换或使用显式访问器(例如您的 ext())来完成。 a.ext() 返回 a,但作为不同的类型 (ExtObjectServer),让您可以访问 a< 的不同方法.

您的问题还询问当 ExtObjectServer 扩展 ObjectServer 时,server.ext() 如何限制为专家方法。答案是:不是,但这是正确的。不应该仅限于此。目标不是提供专家功能。如果是这种情况,那么需要同时使用普通函数和专家函数的客户端代码将需要对该对象进行两次引用,只是类型不同。这样做没有任何好处。

渐进式披露的目标是在明确请求之前隐藏专家信息。一旦你要了,你已经看到了基本的东西,所以为什么要瞒着你呢?

关于c++ - C++ API 中的渐进式披露,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40746898/

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