使用域驱动设计和具有.NET Core(MVC)的微服务(事件驱动)体系结构,并支持多个租户;
我很难确定将第三方放置在何处,每个租户可以启用或禁用相同类型的一个或多个第三方集成。因此,例如,内部的Person实体需要与一个或多个外部CRM保持同步。一些第三方还提供了跨越多个有界上下文的集成。
我放置了逻辑来确定控制器(应用程序/ API层)中哪些外部集成处于活动状态,该外部集成加载当前请求/用户的集成配置,然后分派特定第三方类型的MediatR命令,然后在每个第三方带有服务的单独库中处理(带有自己的DTO和映射等)。 Controller具有通用端点。
例如,客户端在df["keyword"] = df.keyword.apply(lambda x: "[" + x + "]" if x.find("+") < 0 else x)
上以请求正文中的ID进行POST请求。假设这是CRM mask = df.keyword.str.contains('+', regex=False)
df.loc[~mask, 'keyword'] = "[" + df.loc[~mask, 'keyword'] + "]"
的ID,然后控制器发送一个/api/v1/persons
(MediatR命令),并在XYZ
基础结构库中进行处理。
这会导致Controller中出现许多难看的条件逻辑,我希望摆脱它们,但不知道如何。
这实际上也不支持多个相同类型的第三方,因为Controller中的传入实体ID 端点仅特定于一个第三方,但是只有客户端知道这一点。
有更好的解决方案的建议吗?
[编辑]
感谢您的见解。这是我目前实现的方式: See diagram of DDD Third-party integrations