在域层中使用服务层是一种不好的做法吗?

Is it a bad practice to use service layer in domain layer?

我正在使用 Spring、JPA 和 AWS S3 服务。

在我的项目中...
服务层有个S3Serviceclass
域层中有一个image class,它有一个属性是S3上的图像文件的名称。

每当从数据库中删除图像 table 的元组时,都应删除相关的 S3 文件。
所以,我想在image中使用@PreRemove注解,这样图片在被删除之前可以使用S3Service的delete方法。

在域层访问服务层是一种不好的做法吗?
如果是这样,我如何在删除元组时删除 S3 文件?

我想说的是,从实体中删除数据(或调用存储库上的相应方法)的服务也应该调用 S3Service 从 S3 中删除此类文件。

在我看来,您应该尽可能让服务保持相互通信,以便将您的业务逻辑保留在这样的层中。否则,您最终可能会得到难以阅读、维护和更改的意大利面条式代码。


另一种方法可以让 S3 删除是事件驱动的。在这种情况下,每当您删除 Post 时,您都会发布一个事件,其中包含要删除的图像的 ID 或已删除的 Post 的 ID(如果您能够通过它找到图像在 S3 上删除)。这会将数据库中实体的删除与 S3 中图像的删除分离开来。这是我的首选方法。