将自定义 .NET ORM 迁移到实体框架/Dapper
Migrating Custom .NET ORM to Entity Frame / Dapper
我继承了一个规模庞大、有点像迷宫的项目。流量很大,需要优化数据访问,因此我开始将一些由 javascript 调用的 WCF 服务转换为 Web API。
不幸的是,数据库的主键(不是自动递增)也由自定义 ORM 通过查询 MySQL 函数来管理,returns 下一组要使用的 ID。 ORM 然后缓存它们并将它们提供给应用程序。数据库本身是一个不断增长的 2 TB 的数据,这将导致停机时间很长。
我曾计划使用 Dapper,因为我过去很喜欢 ease/performance,但是从这个自定义 ORM 中删除这个数据库似乎令人生畏并且容易出错。
问题:
- 有人对处理大型项目有什么建议吗?
- 我是否应该更专注于将数据库迁移到全新的数据结构中? (它也需要大量标准化!)
个人拙见:
处理遗留代码时的经验法则是:如果某些东西有效,请保持原样。如有必要,进行更改或改进。主要原因是:
- 当您想为系统增加业务价值时,重新设计的效果几乎为零。
- 这个系统,无论好坏,都能正常工作。无论您有多么小心,结构变化总是会把事情搞砸。
此外,这在很大程度上取决于公司的计划,更改的原因(添加功能、修复错误、改进设计或优化资源使用)。我的微薄经验告诉我,时间和预算非常重要,虽然我们总是想重新设计(或者在某些情况下,从头开始编码),但最重要的是业务目标和附加值。
在您的情况下,也许没有必要更改所有 ORM。如果您说 ID 已缓存,则更好的方法是修改 PK,在其上添加身份 属性(每个 table 具有正确的起始值)。之后,您可以删除获取下一个 ID 的代码的特定部分。
在某些情况下,非规范化的数据库有他的原因。我见过将数据复制到 table 以避免连接的情况,这会影响性能。我说的是数百万条记录...
更改 ORM 的原因:可能是它效率低下,或者它不关闭非托管代码(在这种情况下,更好的方法是实现 IDisposable 接口)。如果可行,也许更好的方法是在需要创建新功能时使用新的 ORM。如果项目需要重构以优化目的,则更改需要应用于瓶颈,而不是整个代码。
关于这个话题有很多讨论。一个很好的推荐资源是 Michael Feathers 的 "Working effectively with legacy code" 或 Eric Evans 的 "Getting Started With DDD When Surrounded By Legacy Systems"。
您好!
我继承了一个规模庞大、有点像迷宫的项目。流量很大,需要优化数据访问,因此我开始将一些由 javascript 调用的 WCF 服务转换为 Web API。
不幸的是,数据库的主键(不是自动递增)也由自定义 ORM 通过查询 MySQL 函数来管理,returns 下一组要使用的 ID。 ORM 然后缓存它们并将它们提供给应用程序。数据库本身是一个不断增长的 2 TB 的数据,这将导致停机时间很长。
我曾计划使用 Dapper,因为我过去很喜欢 ease/performance,但是从这个自定义 ORM 中删除这个数据库似乎令人生畏并且容易出错。
问题:
- 有人对处理大型项目有什么建议吗?
- 我是否应该更专注于将数据库迁移到全新的数据结构中? (它也需要大量标准化!)
个人拙见:
处理遗留代码时的经验法则是:如果某些东西有效,请保持原样。如有必要,进行更改或改进。主要原因是:
- 当您想为系统增加业务价值时,重新设计的效果几乎为零。
- 这个系统,无论好坏,都能正常工作。无论您有多么小心,结构变化总是会把事情搞砸。
此外,这在很大程度上取决于公司的计划,更改的原因(添加功能、修复错误、改进设计或优化资源使用)。我的微薄经验告诉我,时间和预算非常重要,虽然我们总是想重新设计(或者在某些情况下,从头开始编码),但最重要的是业务目标和附加值。
在您的情况下,也许没有必要更改所有 ORM。如果您说 ID 已缓存,则更好的方法是修改 PK,在其上添加身份 属性(每个 table 具有正确的起始值)。之后,您可以删除获取下一个 ID 的代码的特定部分。
在某些情况下,非规范化的数据库有他的原因。我见过将数据复制到 table 以避免连接的情况,这会影响性能。我说的是数百万条记录...
更改 ORM 的原因:可能是它效率低下,或者它不关闭非托管代码(在这种情况下,更好的方法是实现 IDisposable 接口)。如果可行,也许更好的方法是在需要创建新功能时使用新的 ORM。如果项目需要重构以优化目的,则更改需要应用于瓶颈,而不是整个代码。
关于这个话题有很多讨论。一个很好的推荐资源是 Michael Feathers 的 "Working effectively with legacy code" 或 Eric Evans 的 "Getting Started With DDD When Surrounded By Legacy Systems"。
您好!