【问题标题】:Atomic Insert-or-Get and Compare-and-Update - A Repository violation?原子插入或获取和比较和更新 - 违反存储库?
【发布时间】:2012-10-23 21:28:41
【问题描述】:

我正在使用存储库模式作为 C#4 和 MVC3 项目的一部分,我只是想确保我没有做坏事;要么是那个,要么只是我的建筑学学派有点得意忘形,我只需要一个象征性的耳光:)

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

  • 在存储库中创建一个新实例只要不存在具有特定状态值的另一个实例
  • 更新存储库中实例的状态值仅当它尚未处于该状态时

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

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

我真的不可能将事务推送回调用代码,特别是因为我不能保证直接存储库是数据库,但可能是 Web 服务(或其他东西);坦率地说,跨网络服务调解交易,虽然我知道这是可能的,但对于我书中如此简单的操作来说有点太繁重了(尤其是在实现方面)!

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

【问题讨论】:

    标签: design-patterns architecture


    【解决方案1】:

    为了它的价值,请允许我提供一个友好的“形象地打耳光”:)
    请记住,模式的存在是为了为您服务,而不是相反。如果您有理由需要稍微“弯曲” DP - 我相信没关系。
    尤其是考虑到您目前没有更好的主意(顺便说一句,我也没有)。

    【讨论】:

    • +1 表示“模式的存在是为了为您服务,而不是相反”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 2013-05-21
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多