【问题标题】:Is there some convenient ORM library framework for c?c有一些方便的ORM库框架吗?
【发布时间】:2012-05-14 02:48:44
【问题描述】:

我最近用c语言使用sqlite3。谁能告诉我一些方便的 C 的 ORM 吗? 是否有必要为我自己的项目开发 ORM 机制?

【问题讨论】:

  • 似乎任何想要 ORM 的人都不太可能使用 C 进行编码。
  • 鉴于 C 通常缺少该首字母缩写词的 Object 部分,您有什么想法?
  • 我也想知道这一点(某种库可以自动从 c 访问);它可能会将结构映射到表中的一行。请downvoters/closers解释为什么?
  • 我知道C缺乏一些特性来建立ORM机制。我期望访问数据库而不是原型数据库 API 更方便。
  • 我开始勾勒出这里可能发生的事情 - isti.bitbucket.org/2012/05/16/orm-for-c.html

标签: c database orm


【解决方案1】:

对 ORM 的需求向我表明,您有某种业务/领域对象模型,您想映射到数据库。

如果是这样的话,那么我觉得您正在尝试使用最适合系统编程 (C) 的语言编写业务应用程序。您可能需要考虑这是否是一个好的架构策略。

此外,我认为 ORM 不太可能适合以下语言:

  1. 本身不是面向对象的
  2. 对元编程/反射没有太多支持,这往往是许多 ORM 方案的核心

最后,有很多人认为 ORM 在任何情况下都是反模式。 (example, example, example)

总的来说,我的建议是:

  • 如果您打算继续使用 C,请完全避免使用 ORM
  • 切换到 ORM 至少得到很好支持并符合范式(最明显的是 Java)的语言/平台

【讨论】:

  • 非常感谢。这些建议很有帮助。我的初衷是避免重复操作访问数据库。因为我在我的项目中发现了很多重复代码。我写了一些机制来做到这一点,但是很难完全抽象。我考虑先找ORM,目前很少。
【解决方案2】:

我将this library 写为“C 的 ORM”。

示例代码如下:

typedef struct person {
  int id;
  char *name;
} person;

void find_by_name(isti_db *db, const char *text, person** result) {
  corm_person_select *s;
  corm_person_select_alloc(&s, db);
  s->name(s, "like", text)->_go_one(s, result);  // populate result from the database
  s->_free(s, 0);  // in "real" code, 0 is a chained status value
}

不幸的是,它没有在任何地方使用(据我所知),它包含了很多经验丰富的 c 程序员可能会觉得奇怪的想法。但它并没有被放弃 - 我仍然对这个问题感兴趣,并希望在某个时候继续解决它。

【讨论】:

    【解决方案3】:

    一个简短的谷歌搜索想出了这个:http://ales.jikos.cz/smorm/

    我从未使用过它,所以不要怪我,如果它会重新格式化你所有的硬盘驱动器,让你的冰箱刚刚温暖到足以破坏你的牛奶,但看起来如果你真的不使用它可能总比没有好想写查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-01
      • 1970-01-01
      相关资源
      最近更新 更多