c - 用于检查属性值的适当 C API

标签 c api

在 C 中有两种明显的方法来提供对内部属性值的外部访问(A)提供一个通用接口(interface)来接受随时间变化的属性列表(一些添加/一些死亡)或(B)一个特定的接口(interface)每一个属性。

示例 A:

int x_get_attribute_value(ATT att)
{
    if (a) return a_val;
    if (b) return b_val;
}

示例 B:

A_Enum x_get_a_type_attribute() {}
B_Enum x_get_b_type_attribute() {}

我记得 Eclipse 的 API 非常像 A(我可能错了)。我不能做的是提出一个令人信服的论据来反对其中任何一个。

A 是干净的 - 任何用户都无处可去查找属性值。它可以干净利落地发展,而不会留下死接口(interface)。​​

B 在一定程度上进行了类型检查——这是 C 的枚举!

是否有一个大的击球手争论将天平从意见中推开?

最佳答案

B 引入新属性的开销要大得多。将新属性引入稳定的软件分支将承担许多风险,因为必须从根本上改变界面。

根据我的个人经验,一般来说,我会保证 A。

很大程度上还取决于软件集成的紧密程度。借用 Booch 的术语,选项 A 促进弱耦合,而 B 促进软件组件之间的强耦合

如果您希望能够卡住界面,使其在很长一段时间内保持稳定,禁止任何更改,那么 B 将允许您这样做:添加新属性是高度可见的。如果您希望能够随时添加新属性,当您期望拥有大量新属性时,选项 A 显然是您最喜欢的。

您也可以考虑两者的健康组合。对于重要的属性具有专用的获取/设置功能。对于其他不太重要的选项,请使用通用的 get/set 函数。如果某个属性变得重要,则可以为其引入专用的 get/set。

注意显然,不应忘记性能:选项 B 在任何微基准测试中都会胜过 A。

关于c - 用于检查属性值的适当 C API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3018767/

相关文章:

api - 如何在类图中显示我正在使用外部 API

api - CKAN:如何使用 API 更新/创建资源的数据字典?

javascript - Spotify:如何防止它记住听过超过一首歌曲?

c - 在 C 的公共(public) API 函数中使用枚举参数是个好主意吗?

c - 为什么 Valgrind 在 realloc() 之后报告无效的 free()?

c - 关于c中函数指针的2个问题

c++ - C语言的Windows UIAutomatin

复制链表

c - 为什么这段代码在c中会失败?

javascript - 获取编辑页面的用户数组