在具有服务层的多层体系结构中,是否可以让一个服务调用另一个服务?

本文关键字:服务 调用 另一个 一个 是否 体系结构 | 更新日期: 2023-09-27 18:12:41

我有一个包含存储库的多层应用程序。

在此之上,我有一个服务层。我的理解是每个存储库应该有一个单独的服务。

是否可以让服务A调用服务b中的另一个方法?当然,这会在服务a中创建对服务B的依赖(我使用接口和DI)。

在我的示例中,我有一个User服务,它处理,添加用户,验证用户,通过ID查找用户等。我还有一个Book服务,它允许我为特定用户添加图书。

图书服务是否应该调用用户服务来检索要向其中添加图书的user实例?

在具有服务层的多层体系结构中,是否可以让一个服务调用另一个服务?

简短回答:yes

A bit less short:

你的选择是要么让"图书服务"直接访问"用户存储库",要么扩展用户服务,这样它就可以添加图书——两者都不是一个好选择……所以做你描述的是正确的(图书服务访问用户服务)…一个更"纯粹"的选择是创建一个控制器/聚合/事务/协调器服务,它使用图书服务和用户服务来实现你所描述的,这样"直接服务"(图书和用户)都保持"无依赖"…

是的,只要这样做有意义,这是可以接受的。

如果图书服务需要从用户服务运行逻辑,而图书服务不调用用户服务,则必须在图书服务中复制用户服务逻辑。这意味着,如果您的业务逻辑为服务逻辑所做的事情而改变,您必须确保使用该逻辑更新图书服务,否则您将遇到错误和不一致(和意外)的行为。

然而,如果你发现这种情况经常发生,你可能不得不开始研究每个服务的功能,并可能将它们分解成更小的服务。

用户提到他正在使用EF。在这种情况下,他可以将用户对象传递给图书服务或用户Id,并在保存之前在图书存储库中创建用户对象。