小编mar*_*iva的帖子

事件采购和乐观并发控制

当您希望代码在竞争条件下工作时,通常开发人员使用乐观并发控制(OCC).来自维基百科:

...在提交之前,每个事务都会验证没有其他事务修改了它已读取的数据.如果检查显示有冲突的修改,则提交事务将回退...

实现OCC的方法是检查version要修改的数据.如果版本不同,那么其他事务已修改数据,并由应用程序决定如何解决冲突(重新尝试,通知用户......).

草案如下:

class Repository
{
    public class save($data)
    {
        $currentVersion = $data->version;
        $data->version  = $currentVersion + 1;

        $result = $this->db->update($data, [
            'id'        => $data->id,
            'version'   => $currentVersion
        ]);

        if (1 === $result) {
            // everything ok
        } else {
            // conflict!
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,因为EventSourcing我们只追加域中发生的所有事件,我们不能再使用这种方法来实现OCC.在使用EventSourcing时,哪些其他方法可以保留OOC?

一个可行的选项,它可以在存储时查找冲突事件.这种方法允许对事件进行细粒度控制.我不知道这是否会使解决方案复杂化,或者我认为这是一个"标准",我在http://danielwhittaker.me/2014/09/29/handling-concurrency-issues-cqrs-event-sourced指出-系统/

问题描述中的任何空白都是值得赞赏的.提前致谢!

domain-driven-design optimistic-concurrency event-sourcing

13
推荐指数
3
解决办法
2577
查看次数

将不可变对象转换为可变对象(递归)的最佳方法是什么?

具体来说,当我使用带有JSONkit的AFNeworking发出请求并且接收到嵌套了几个数组和字典的(id)JSON时,这个问题就出现了.

如果我不想修改数据,我没有任何问题:

self.myNSArray = [JSON objectForKey:@"result"];

但是如果我想修改数据,我必须将它存储在一个可变变量中:

self.myNSMutableArray = [[JSON objectForKey:@"result"] mutableCopy];

最后一个不会将嵌套数组或字典转换为可变数据; 它只适用于第一级.

我找到的唯一方法是在这个链接上递归可变对象 ; 但我不知道是否有解决此类问题的最佳方法.

提前致谢.

objective-c mutable type-conversion

10
推荐指数
2
解决办法
2415
查看次数

DDD:在旧系统中应用Event Store

我们当前的系统是一个不使用的遗留系统domain events.我们将开始发布domain events.其他有界的背景将会听取这些domain events,但仅限于我们开始发布时,丢失所有过去的信息.

那么,如何处理这个没有记录这些事件的遗留系统,但是我们想要在实现这个事件存储系统之前有过去的历史?

这是一个很好的方法,试图弄清楚发生了什么,并尝试根据我们在数据库中的数据创建域事件(逆向工程)?

domain-driven-design domain-events event-store

2
推荐指数
1
解决办法
145
查看次数