原子插入或获取和比较和更新 - 存储库违规?

时间:2011-03-29 12:32:56

标签: design-patterns architecture

我正在使用Repository模式作为C#4和MVC3项目的一部分,我只是想确保我没有做坏事;无论是那个还是仅仅是我的建筑迂腐得到了一点点自我而且我只需要一个比喻的圆脸:)

对于特定的模型类型,我需要能够执行以下两个操作:

  • 在存储库中创建一个新实例,只要另一个实例不存在某个状态值
  • 仅当存储库中的实例尚未处于该状态时才更新该实例的状态值

在这两种情况下,操作必须是原子的,因为它们用于做出关键决策。

由于数据库将成为存储库的初始端点,因此可以使用几个存储过程中的事务来实现。但是,这意味着我的Repository接口上没有Get / Insert / Update方法,而是需要Get_Or_InsertCompare_And_Update语义,以便应用程序可以从存储库中获得原子性,而不是自己强制执行。

我真的不可能将事务推回到调用代码,特别是因为我无法保证直接存储库将是一个数据库,但可能是一个Web服务(或其他东西);并且坦率地调解Web服务之间的交易,虽然我知道这是可能的,但在我的书中这么简单的操作只是有点过于沉重(特别是在实现方面)!

那么,我可以愉快地将这些特殊情况操作添加到存储库中,还是我遵循错误的模式?

1 个答案:

答案 0 :(得分:1)

为了它的价值,请允许我提供一个友好的“比喻圆脸”:) 记住存在的模式是为你服务,而不是相反。如果你有理由需要“弯曲”DP一点 - 我相信它没关系 特别是考虑到你目前没有更好的想法(顺便说一下,我也没有)。