ORM:我为啥要使用它? [复制]

Posted

技术标签:

【中文标题】ORM:我为啥要使用它? [复制]【英文标题】:ORM: why should i use it? [duplicate]ORM:我为什么要使用它? [复制] 【发布时间】:2010-06-03 16:05:12 【问题描述】:

可能的重复:Are there good reasons not to use an ORM?Why should you use an ORM?

你好, 我在 SQL 领域开发多年(许多不同的 sql 服务器,如 Oracle、MSSql、mysql),我一直很高兴这样做。我最近在 ORM 周围看到了很多东西,我在问我为什么要走向这个世界。 你能给我一些好点吗,让我花时间学习一种不同的方式来做我今天已经做的事情? 提前致谢 c.

【问题讨论】:

因为所有优秀的程序员都会这样做:) 至少4个重复:***.com/questions/448684/why-should-you-use-an-orm***.com/questions/398134/…***.com/questions/494816/using-an-orm-or-plain-sql***.com/questions/194147/… ***.com/questions/494816/using-an-orm-or-plain-sql ? 来吧......即使给你一个疑问的好处,当你创建一个问题时,也会提出几个类似的问题,包括Why should you use an ORM?(正如 Bozho 指出的那样)。 这样的问题如何获得投票。 【参考方案1】:

如果你这么写,这么多年:

string query = "SELECT * FROM myUsers WHERE Name = '" + aName + "'";
ResultSet result = sql.Execute(query);
UserList users = TransformResultSetToUsers();

那么你是时候为自己找到一个合适的 ORM(并且非常害怕 SQL 注入攻击)。

ORM 为您做的就是隐藏方法、安全性、性能、缓存、映射等,否则会花费大量时间来编写自己的程序。这样做怎么样:

User currentUser = DaoUsers.GetUserByName(aName);
currentUser.Name = "new name";
DaoUsers.UpdateUser(currentUser);

它涵盖了您的所有查询、更新等。如果您在家中使用 MySQL 进行测试,并且在使用 SQL Server 时,您需要做的就是更改连接字符串。哦,它提供了缓存(在 NHibernate 等情况下),这使得这个速度快如闪电,如果不需要,甚至不需要接触数据库。

All-in-all:使用 ORM 意味着更容易。不用担心了。没有更多的错别字。让 ORM 引擎处理一切。从对象设计数据库,而不是从“CREATE TABLE”语句。专注于编程逻辑,而不是担心 SQL 的多样性。

最重要的是:类型安全如果您将 ORM 与类型安全的 OO 语言一起使用,这将使编译器在您开始调试错误之前就捕获它们。

【讨论】:

【参考方案2】:

做几个数据库项目(没有ORM)我可以看到的优势是:

    执行 CRUD(创建、读取、更新、删除)的大量代码可以通过编写一个 XML 文件或实例化几个对象来简单地变出。这可以为您提供一个巨大的领先优势。

    您可以在单个位置定义架构,即 XML 文件或几个对象。这太棒了,因为它实现了 DRY 原则!

    为您的面向对象应用程序提供了一个漂亮、干净的对象抽象来访问数据,而不是您自己创建的一些 hackish 对象(取决于您的编程技能)。

缺点:

    ORM 的抽象可能会泄漏,当它不起作用时,您会在试图弄清楚它在后端发挥的作用时头疼。

    ORM 不适用于许多语言,或者处于 alpha 阶段(C++,我在看你!)。

注意:我必须承认我还没有使用过 ORM,但我计划在下一个项目中使用它。

【讨论】:

以上是关于ORM:我为啥要使用它? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥要同时使用控制器和演示器? [复制]

为啥 Mongoose ORM 选择不使用常规的 mongo 语法进行查找、排序等?

为啥要使用 Deque 而不是内置 Stack<>? [复制]

为啥要使用 Deque 而不是内置 Stack<>? [复制]

为啥我们使用 SASS,甚至我们使用 SCSS? [复制]

为啥我们要“使用 2 个堆栈实现一个队列”? [复制]