您建议的两个替代方案在您希望从 API 提供的“功能”数量(显然相当大)方面没有区别。然而,第二个似乎有很多缺点,因为你失去了任何强类型检查,记录功能等变得更加困难。(我看到的唯一优点是,如果你添加功能,你不需要更改你的 API . 但缺点是用户直到运行时才能弄清楚 API 更改(如删除的函数)。)
与这个问题更相关的是单一责任原则(http://en.wikipedia.org/wiki/Single_responsibility_principle)。当你在谈论 OOP 时,你不应该在一个类中公开你的数十个函数,而是将它们拆分到不同的类中,每个类都有一个单一的职责。定义良好的“职责”和角色需要一些练习,但遵循一些基本准则将帮助您快速入门。请参阅OOP 是否有任何规则?一个好的起点。
回复问题编辑
我没有使用过 D-Bus,所以这可能是完全错误的。但是通过快速浏览我阅读的教程
每个对象都支持一个或多个接口。将接口视为一组命名的方法和信号,就像在 GLib、Qt 或 Java 中一样。接口定义对象实例的类型。
DBus 使用简单的命名空间字符串标识接口,例如 org.freedesktop.Introspectable。大多数绑定会将这些接口名称直接映射到适当的编程语言结构,例如 Java 接口或 C++ 纯虚拟类。
据我了解,D-Bus 具有不同对象的概念,这些对象提供由多种方法组成的接口。这意味着(对我而言)我上面的回答仍然适用。指定 API 的“D-Bus 本机”方式意味着展示接口,我看不出好的 OOP 设计指南不应该有效的任何理由,在这里。由于 D-Bus 似乎将这些甚至映射到本地语言结构,这更有可能。
当然,没有人会阻止您仅使用 XML 构建自己的 API 描述语言。但是,诸如此类的事情是对底层技术的某种滥用。你应该有充分的理由做这样的事情。