【发布时间】:2016-06-02 15:05:49
【问题描述】:
我阅读了这篇关于 NserviceBus Sagas 的优秀教程 (http://blogs.planbsoftware.co.nz/?p=247),但我仍然不明白这种模型 (sagas) 与使用数据库或业务层事务相比有什么优势?
【问题讨论】:
标签: nservicebus nservicebus-sagas
我阅读了这篇关于 NserviceBus Sagas 的优秀教程 (http://blogs.planbsoftware.co.nz/?p=247),但我仍然不明白这种模型 (sagas) 与使用数据库或业务层事务相比有什么优势?
【问题讨论】:
标签: nservicebus nservicebus-sagas
saga 模型的主要好处是,它允许您获取原本会分散在整个系统(以及各种批处理作业)中的逻辑和数据,并将它们全部放入一个类中,更好地遵循单一职责原则。一旦你有了这些,你就会获得来自良好软件实践的所有其他好处——更好的可测试性、可维护性等。
【讨论】:
为了向您展示 Saga 模型的真正好处,我将向您展示两个示例。
想象一下,您拥有包含数百个分布式主机的面向服务的体系结构。客户下订单,开始一个或多个 sagas。每个 saga 都有一些相关的业务逻辑。每个给定 saga 的处理程序可以在不同主机之间共享,您无需检查处理每条消息的订单状态,NServiceBus 隐式检查通过订单 id 或其他属性匹配它的 saga 状态,如果它仍然打开,您将获得它您的数据上下文。
您也可以将此模型用作不使用 NServiceBus 的模式。想象一下,您开发了一个视频游戏并想要跟踪一些用户组合。每次玩家点击跳跃时,您都会打开传奇并添加处理其他快速输入的奖励积分。一旦玩家在输入之间延迟一段时间,saga 会自行关闭,从而节省组合总分。
Saga 有什么好处?
1) 您的业务逻辑被封装在一个地方 - saga。
2) 您可以轻松地扩展它,添加额外的 saga 或删除它们。您还可以将它们移动到其他处理程序或主机。
3) 迁移时不需要知道数据库中需要哪些数据,只需要迁移包含所有必要信息的 sagas
【讨论】: