在面向服务的体系结构中实现软删除资源的一些经过验证的模式是什么?

时间:2014-03-04 10:43:43

标签: soa

我们有一个遗留的单片Ruby on Rails应用程序,我们想重构它创建一组Web服务。因此,Users资源和Cars资源将在两个不同的Web应用程序中处理。

但我们有一个非常重要的功能:软删除。软删除意味着您可以删除用户,但之后您可以恢复它。对于最简单的情况,实现此软删除很简单:删除用户,取消删除它 - 用户服务知道它的全部内容。

但是,当您要删除的资源与在其他服务中处理的其他资源有某种关系时,它会变得复杂。在用户的示例中,我们认为用户有汽车。删除用户时,删除他的汽车。当你取消删除用户时,服务也应该恢复他的汽车。

我们想到了一些可能性:

  • 删除用户后,将Web请求硬编码到删除其汽车的服务。
  • 实施事件系统:为了删除资源,执行此操作的服务将引发“已删除”事件并将其发送给该事件的所有已注册服务。

有没有人在完成任何以前的模式后有过好的或坏的经历?实现此功能有哪些其他好的选择?

1 个答案:

答案 0 :(得分:1)

事件实现通常很有效。但是,由于服务是分散的,您可能需要添加一些机制来确保删除(和取消删除)是所有相关服务的句柄。 实现这一目标的两种常用方法是orchestration(即确保所有操作都得到执行的外部协调员)或Saga(与所涉及的服务之间的某种协调的长期交互)