业务层处理断开的数据库关系

时间:2019-10-29 14:56:46

标签: asp.net asp.net-core design-patterns database-design

有些数据库表存储数据的副本,但是不幸的是,这些表的原始作者并不是在需要时使用关系(FK,Guid等)来引用数据,而是实际上将数据本身复制到了其他表..也许是为了减少开销并简化一次查询中所有必要信息的获取。

现在显然出现了问题,因为另一个人编写了这样的代码,比如说“表A”中的“数据1”可以由用户修改,而“数据1”也位于“表B”和“表C”中'。至少这并非完全没有希望,因为“表A”中还有另一列,例如“键1”,复制到“表B”和“表C”时可以与“数据1”配对使用,至少用户更改关系不会丢失。

当前代码使用asp.net MVC模式,并且我了解此修复程序可能取决于代码的编写方式以及所有其他内容,但是有人知道这样的问题的众所周知的修复程序吗?设计模式,体系结构等。目前,重新设计数据库架构不是一种选择,并且需要向后兼容,这意味着应该能够在没有密钥的情况下处理旧格式,但是该计划最终将已存储的数据更新为具有密钥。

1 个答案:

答案 0 :(得分:1)

最合适的设计模式是“ Anti-corruption layer”。目的是通过在其周围构建一个层来隔离问题,该层允许其他系统看起来一切正常。

在MVC应用程序中,几乎肯定需要将其放置在“模型”代码和持久层之间。例如,您可以引入一种名为“ Save_to_business_concept_A”的方法;然后将根据当前逻辑操作表A,B和C。

一旦您的应用程序通过反腐败层,就可以进行重构。