我们应该将应用层与 HTTP 分离吗?

Should we decouple Application Layer from HTTP?

假设您遵循 DDD 并且拥有域、应用程序和表示(控制器)层,那么应用程序层是否应该与对 HTTP 请求以及与之相关的所有其他内容(例如 cookie、会话)的了解完全分离?等

为了说明,假设我们在应用层中的 CommentingService 需要来自名为 guestId 的 cookie 的值。这个值应该作为参数传递给我们的服务,还是我们可以传递整个 Request (HttpContext) 对象并让我们的服务从那里提取它。

常识告诉我,如果我想在其他地方重用这个应用层,我会希望它与网络分离。

服务

是的,您将希望 decouple 您的应用程序层不受任何网络问题的影响。
Application layer 负责管理您的域对象,如聚合、存储库等(编排)。

大多数情况下,您将使用提供 Rest Api 功能的下一层。

如果你像那样分解它,你可以将你的 API 与 CLI、Rest、Soap 或你的企业希望你提供的任何东西一起使用。

Cross-cutting 关注

您将希望在 application layer 中实现 cross-cutting concerns,因为您不想为每个外部层重新发明轮子。 例如:安全、缓存、事务管理日志记录。 它没有为您提供 business capabilities,因此您不会在 domain layer 中实现它们,但您可以在 application layer.

中实现它们