CQRS和数据访问审计

时间:2012-02-03 16:49:36

标签: design-patterns cqrs

CQRS模式如何处理数据访问审核?或者可以吗?

让我给出一些背景知识:

我有一个分布式系统。它有几个“部分”。每个部分处理部分业务。 (一个订单,另一个订单,另一个客户等)

我原本打算让每个部分互相发送商业活动的消息(即订单创建,新客户注册等)。然后可以将事件存储起来并以CQRS方式重放。

我还计划每个部分都有一个他们需要的数据数据库来自其他部分(订单会保留一个基本的客户列表,计费将有一个简单的订单列表等)。这些数据将通过业务事件消息获得。

我知道这不是“真正的”CQRS。但我认为我的问题同样适用于CQRS。

因此,在CQRS中,审计数据访问和数据安全如何工作?您是否只需要相信所有下游系统都能正确审核? (非常长的信任)

我的建筑师因此而不喜欢CQRS。相反,我们将在分布式系统的每个部分中使用服务来提供数据请求。这样,审计(和安全)可以在中央(受控)位置完成。

那么,CQRS是否有审核数据访问的策略,我看不到?或者CQRS仅适用于不需要控制数据的系统?(或者我是否完全忽略了CQRS的观点?)

以防万一:我正在使用Visual Studio 2010,C#4,.NET 4,WCF 4和NServiceBus 2.6

2 个答案:

答案 0 :(得分:1)

我认为模式本身没有任何内置机制 - 所以你说“你只需要相信所有下游系统都能正确审核吗?” - 是的

只是为了澄清,您是否想要审核诸如“谁查看了什么数据”之类的内容(即用户特定数据)?或者您想要审核哪些消息是由哪个系统发送的(即系统事件数据)?

无论哪种方式,我想也许你已经在做CQRS,即使你有一个“紧密绑定”的中央服务总线 - 这一切都取决于你的类的设计方式。 CQRS和CQS只是一种分离代码的机制,为每个类赋予单一职责。唯一的区别似乎是“CQRS”通常涉及推断不同系统的“消息”,而“CQS”似乎推断“方法”分离推断它在一个应用领域内。我认为有些人在将服务总线作为解决方案被视为CQRS的“要求”方面做了大量工作。查看此解释,了解CQS与CQRS之间潜在差异的论点:http://codebetter.com/gregyoung/2009/08/13/command-query-separation/。在一天结束时,分担责任似乎通常是一个好主意。

尝试回答您的具体问题:

  • “CQRS是否有审核数据访问的策略,我看不到?” - 不,作为一种模式,它没有“审计”机制。这纯粹取决于它的实施。
  • “仅适用于不需要控制数据的系统的CQRS” - 不,绝对不是。我在“简单”的Web应用程序中实现CQS / CQRS,因为我认为它可以很好地分离出代码。请参阅我的博文:http://www.nootn.com.au/2013/03/command-query-separation-to-better.html

我知道这对你来说可能为时已晚,但希望对某人有所帮助。我也有兴趣听取别人对此的看法。

答案 1 :(得分:1)

由于分割出命令和查询,我实际上发现在我们的系统中记录查询要容易得多。我选择使用公共汽车'我们的查询的样式结构,所以我有一个中心位置所有查询。这样可以轻松实现日志记录,安全性和性能监控等交叉问题。我已经发现查询运行频率更高和/或比预期慢,允许我进行优化。希望这可以帮助。