我一直在研究异步消息传递,我喜欢它优雅地处理某些领域内的一些问题的方式以及它如何使领域概念更加明确.但它是一种可行的通用域驱动开发模式(至少在服务/应用程序/控制器层),还是设计开销,应该限制在基于SOA的场景,如远程服务和分布式处理?
好问题:).异步消息传递的主要问题是当人们使用过程语言或面向对象的语言时,以异步或基于事件的方式工作通常非常棘手和复杂,并且程序员难以阅读和理解.如果它以有点同步的方式构建 - 业务逻辑通常更简单 - 调用方法并立即获得结果等:).
我的经验法则通常是尝试在微观层面上使用更简单的同步编程模型来实现业务逻辑; 然后在宏级别使用异步和SEDA.
例如,提交采购订单可能只是将消息写入消息队列; 但是,采购订单的处理可能需要10个不同的步骤,这些步骤在高性能分布式系统中是异步和并行的,并且许多并发进程和线程并行处理各个步骤.因此,宏级别布线基于SEDA方法 - 但在微观级别,单个10个步骤的代码可以主要以同步编程风格编写.