【问题标题】:Application that depends heavily on stored procedures严重依赖存储过程的应用程序
【发布时间】:2010-03-25 12:46:39
【问题描述】:

我们目前有一个主要依赖于存储过程的应用程序。大量使用临时表。这是一个非常大的应用程序。

面对这种情况,我想使用 Entity Framework 或 Linq2Sql 进行重写。我可能会考虑使用 Fluent Hibernate 或 Subsonic,因为我过去曾广泛使用它们。

由于使用了临时表,我在 Linq2Sql 生成存储过程的返回类型时遇到了问题,我认为将所有存储过程从临时表更改为内存表很麻烦。

考虑到我想要做出的 2 个选择,这 2 个中的哪一个是最好的路线,为什么?如果我的选择非常愚蠢,请提供替代方案。

编辑: 问题和变化的原因是数据访问层不存在,并且是 10 年前构建的。我们目前仍然遇到很多问题。我不想透露太多,但如果你看到它,你的眼睛会开始流血:)

【问题讨论】:

  • 让我第一个问强制性的“为什么?”。正确使用存储的过程和临时表没有任何问题。切换数据访问架构会引入一组新的错误,并可能导致性能下降。

标签: .net architecture


【解决方案1】:

这可能不是您想要的答案,但听起来这主要是关于将相关代码隔离到“新”数据访问层中。

如果您通过接口抽象出数据访问,您就可以使用任何您喜欢的数据访问实现。我只是不能 100% 确定这与 Enity 框架之类的东西有什么关系。

我选择这条路的原因是,它可以很好地彻底分离关注点,使应用程序随着时间的推移更易于使用,并且不会以牺牲性能为代价(根据我的经验) .

作为第一步 - 而不是重写,我希望这样做 - 只需在原地获取一个数据层,然后抽象出来以便您可以使用它。

同时,您可以使用 Enity 框架之类的东西进行一些概念验证工作,这样当您准备重构新的 DAL 时,您就有了可靠的信息来做决定。

请记住,“执行质量”需要与“进化”质量保持平衡 :)

【讨论】:

  • +1 我同意。定义抽象级别是关键。有了这个,他可以非常轻松地创建存储过程实现,并且随着时间的推移慢慢地将这些实现转换为他想要的任何东西。
  • 这绝对是我一直在寻找的答案,谢谢 Adrian。我更喜欢这个答案的原因是我相信抽象是关键,随着软件的发展,我们的软件也应该能够做到。谢谢!
【解决方案2】:

你有没有想过LLBLGen Pro?这是一个商业解决方案,但非常便宜,我相信它比这两种选择要好得多。我认为 Frans Bouma 实际上也是 SO 用户,但他们的论坛也很有帮助。

【讨论】:

  • 我没有与 LLBLGen 合作过,我知道,因为 Frans Bouma 是一个非常活跃的推特者和 C# MVP :) LLBLGen Pro 与其他替代品相比有什么好处?
  • 支持仅列举一个...尝试从 MS 那里获得有关 Linq2Sql 或 EF 可能遇到的任何问题的回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多