在ex26中学习C的艰难方式'在db.c
文件中,Zed定义了两个函数:
static FILE *DB_open(const char *path, const char *mode) {
return fopen(path, mode);
}
static void DB_close(FILE *db) {
fclose(db);
}
我很难理解将这些非常简单的调用包装到fopen
和fclose
的目的/需要。包含非常简单的函数的优点是什么,如上面给出的例子?
答案 0 :(得分:7)
在这种特殊情况下,包装器用于隐藏DB_open
,DB_read
或DB_close
全部映射到文件操作的详细信息。
这种方法实现了一个抽象层,通过它可以访问所有与数据库相关的函数。此外,这提供了模块性,稍后可以添加更多方法来打开/读取/关闭数据库。
正如Michael Kohne在评论中所解释的那样,应该改进这个包装器以完全隐藏例如: FILE *db
的类型,用struct DB_context *context;
代替。
答案 1 :(得分:0)
Wrappers(或 stubs )通常用于保护代码的其他区域免受被包装函数的更改。
它也是与动态库和共享对象交互的有用方式。
答案 2 :(得分:0)
基本上,包装器意味着使用我们的/ a_developer自定义函数隐藏底层例程的所有相关信息。
您已经提到文件名本身就是db.c,所以开发人员可能想要所有的关键&使用/声明的重要功能必须具有 DB _
的开头