Domain driven design 局部有界上下文的积分

Domain driven design 局部有界上下文的积分,domain-driven-design,integration,bounded-contexts,Domain Driven Design,Integration,Bounded Contexts,在“实现域驱动设计”中,Vernon给出了将有界上下文与消息传递或基于REST的解决方案集成的详细示例,它还提到了数据库集成,但我知道在BC之间共享数据库或至少是db表并不是一个非常干净的解决方案 但是,如果我要集成的两个BC本地托管在同一台服务器上,那么使用消息传递/rest/rpc解决方案真的是一个好主意吗?(对我来说,这似乎更适合远程托管的BC) 除DB集成外,其他替代方案是什么?在同一个进程中托管两个BC并直接调用它(仍然使用适配器和转换器进行干净的分离) 谢谢您可以考虑在同一台服务器上

在“实现域驱动设计”中,Vernon给出了将有界上下文与消息传递或基于REST的解决方案集成的详细示例,它还提到了数据库集成,但我知道在BC之间共享数据库或至少是db表并不是一个非常干净的解决方案

但是,如果我要集成的两个BC本地托管在同一台服务器上,那么使用消息传递/rest/rpc解决方案真的是一个好主意吗?(对我来说,这似乎更适合远程托管的BC)

除DB集成外,其他替代方案是什么?在同一个进程中托管两个BC并直接调用它(仍然使用适配器和转换器进行干净的分离)


谢谢

您可以考虑在同一台服务器上使用类似于0MQ的东西进行进程间通信。在过去,我也只是按照您建议的相同流程来托管内容,并且只是使用接口/内存消息来分离上下文


一切最终都是关于权衡的,所以你只需要决定你愿意接受的孤立程度。最简单的解决方案是通过文件夹和接口在解决方案内部分离,另一端是完全分离的服务器

您可以考虑在同一台服务器上使用类似于0MQ的东西进行进程间通信。在过去,我也只是按照您建议的相同流程来托管内容,并且只是使用接口/内存消息来分离上下文


一切最终都是关于权衡的,所以你只需要决定你愿意接受的孤立程度。最简单的解决方案是通过文件夹和接口在解决方案内部分离,另一端是完全分离的服务器

我认为位置不应该在BCs之间的w.r.t.整合中发挥作用

确实还有其他因素要考虑,比如保证向接收方交付,以确保处理过程发生。无论两个BC是否托管在同一台服务器上,都应该需要这样做

忽略位置的另一个原因是,当您需要扩展时,您的体系结构应该能够从一开始就处理它


正如tomliversidge提到的,可以使用一些部署机制,如非持久性消息传递来加快速度,但肯定会有一个权衡,这必须是一个有意识的决定。

我认为位置不应该在BCs之间的w.r.t.集成中发挥作用

确实还有其他因素要考虑,比如保证向接收方交付,以确保处理过程发生。无论两个BC是否托管在同一台服务器上,都应该需要这样做

忽略位置的另一个原因是,当您需要扩展时,您的体系结构应该能够从一开始就处理它


正如tomliversidge提到的,可以使用一些部署机制(如非持久消息)来加快速度,但肯定会有一个折衷,这必须是一个有意识的决定。

好的,谢谢您的回复。但是,即使我们现在不打算在多台服务器上部署,从一开始就使用“远程集成类型”真的很重要吗?如果我们做得正确,我们现在就不能集成到同一个流程中吗?如果我们需要分离流程或服务器,那么现在就可以更快、更简单地集成到同一个流程中,然后再更改适配器吗?您可以@Jonothan这样做。请记住,您可能会追求一致性,因此只要您使用的机制允许所有更改得到保证,那么您就不会有问题。然而,这可能需要分布式事务,甚至是跨越两个BC的事务吗?如果是这样的话,您以后可能会遇到一些主要的重构。如果您现在就可以实现它,并且不需要花费太多额外的时间或精力,那么它可能值得考虑。虽然不是“未来证明”,只是试图防止额外的工作继续进行:)好的,谢谢你的答复。但是,即使我们现在不打算在多台服务器上部署,从一开始就使用“远程集成类型”真的很重要吗?如果我们做得正确,我们现在就不能集成到同一个流程中吗?如果我们需要分离流程或服务器,那么现在就可以更快、更简单地集成到同一个流程中,然后再更改适配器吗?您可以@Jonothan这样做。请记住,您可能会追求一致性,因此只要您使用的机制允许所有更改得到保证,那么您就不会有问题。然而,这可能需要分布式事务,甚至是跨越两个BC的事务吗?如果是这样的话,您以后可能会遇到一些主要的重构。如果您现在就可以实现它,并且不需要花费太多额外的时间或精力,那么它可能值得考虑。不过,这并不是“未来证明”,只是为了防止额外的工作继续进行:)如前所述,您可以使用ZeroMQ或(对于.NET)MediatR在内存中实现pub-sub。但共享数据意味着分散所有权,也意味着您的上下文不再受限制。如前所述,您可以使用ZeroMQ或(对于.NET)MediatR在内存中实现pub-sub。但共享数据意味着扩大所有权,也意味着你的环境不再受到限制。