我们应该将应用层与 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
.
中实现它们
假设您遵循 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
.