6

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

最重要的是,我有一个服务层。我的理解是每个存储库都应该有一个服务。

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

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

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

4

3 回答 3

8

简短的回答:是的

短一点:

您的替代方案是让“图书服务”直接访问“用户存储库”或扩展用户服务以便它能够添加一本书 - 这不是一个好的选择......所以做你描述的事情是正确的(图书服务访问用户服务)......一个更“纯粹的选择”是创建一个控制器/聚合/事务/协调器服务,该服务使用图书服务和用户服务来实现您所描述的,这种方式都是“直接服务” (书和用户)保持“无依赖”......

于 2011-10-26T18:56:43.853 回答
1

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

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

但是,如果您发现这种情况经常发生,您可能必须开始查看每个服务的功能,并可能将它们分解为更小的服务。

于 2011-10-26T18:58:46.943 回答
0

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

于 2011-10-26T18:54:33.417 回答