1

我非常高兴地使用 Dapper 构建了一些数据层。当然,维护所需的 SQL 字符串可能是一个问题,尤其是当 db 架构发生更改(重命名列等)时。

我正在寻找一种“删除”大多数 SQL 字符串 blob(不使用 EF 或 Linq)的策略。要么找到/构建一个类型安全的查询 API 来生成 SQL(如 jooq),要么想到某种元生成。

我错过了什么吗?是否有最佳实践或更好的方法?

谢谢

注意:使用 EF 或 Linq 可以解决问题,但我们正在努力尽可能接近 SQL。

4

1 回答 1

1

我完全同意约翰·吴的观点。存储过程是要走的路。
您可以将存储过程视为一种封装数据库的方式——您的应用程序不需要知道数据是如何存储的,它只需要知道哪些存储过程可用以及它们做什么。

有很多好处:

  1. 这使您的 SQL 语句远离应用程序代码。
  2. 您的查询在数据库中被编译和重用,因此您可以获得性能。
  3. 您的 SQL 登录可以具有更严格的安全细节,使黑客更难破坏您的数据库。
  4. 存储过程几乎消除了 SQL 注入的可能性(除非您在内部使用动态 SQL),因为您必须使用参数将数据传递给存储过程。
  5. 无需重新编译软件即可对数据库结构进行一些更改,因为它不再直接访问表。
  6. 使用存储过程可以更有效地完成许多 SQL 代码(例如,内联 sql 不能使用表值参数)
  7. 如果您需要支持多个数据库供应商,使用存储过程可以让您的生活更轻松——例如,pl/sql 和 t-sql 之间的差异不再是问题。

我敢肯定,有很多我没有提到的原因,还有一些反对使用存储过程的原因。(例如,有人可能会说存储过程允许您将逻辑移动到数据库中,这是放置逻辑的错误位置。我个人不同意这种说法 - 我认为某些逻辑必须在数据库中。)

于 2017-09-28T04:13:56.970 回答