Session NLayers架构-用户会话是否为横切组件?我们如何实施它?
假设我们有N层体系结构(例如:表示、域、持久性)。 表示层是Web应用程序,但我们必须记住,我们可能希望为另一个表示层(如Web服务或窗口应用程序)重用域和持久性 域必须实现所有业务逻辑,并考虑用户权限。现在我的问题是,域如何知道用户会话,谁是调用其服务的用户 我的域服务接口(或契约)在所有his方法中都将包括表示层提供的“UserId”输入参数(域应为表示层中的信任):Session NLayers架构-用户会话是否为横切组件?我们如何实施它?,session,architecture,dns,layer,Session,Architecture,Dns,Layer,假设我们有N层体系结构(例如:表示、域、持久性)。 表示层是Web应用程序,但我们必须记住,我们可能希望为另一个表示层(如Web服务或窗口应用程序)重用域和持久性 域必须实现所有业务逻辑,并考虑用户权限。现在我的问题是,域如何知道用户会话,谁是调用其服务的用户 我的域服务接口(或契约)在所有his方法中都将包括表示层提供的“UserId”输入参数(域应为表示层中的信任): GetProfileInfo(用户ID) GetUserPendingOrders(用户ID) 或者。。用户会话是否应该
- GetProfileInfo(用户ID)
- GetUserPendingOrders(用户ID)
- GetProfileInfo()
- GetUserPendingOrders()
我们必须在存储器中保存用户会话吗?或者还有其他方法吗?传统的基于web的上下文中的用户会话只有web服务器知道 您可以在应用程序中拥有用户会话的概念(作为另一种域对象,具有自己的数据存储库等),但您只需要小心,不要以任何方式将其绑定/紧密耦合到会话的web服务器概念 其他类型的应用程序(WinForms等)也是如此 用户ID的概念与用户会话无关;当然,用户可能会使用该系统(创建一个新会话,您可以将这两件事联系在一起。(您上面的示例让我怀疑您是否混淆了它们) 这是一个跨领域的问题吗? 如果将用户会话建立为正式的域对象,那么答案是“是”,因为域对象(或它们所代表的概念)是横切的,但与日志记录或错误处理不同 否则,如果用户会话仅仅是(例如)基于web服务器的会话,那么答案是“否”,这是一个特定于表示层的概念—在web服务器上运行 还有第三种选择,有点像中途之家:你可以像传递任何其他原始数据块一样传递用户会话ID,但实际上从来没有用户会话域对象。在这里,你只需要小心;例如,一种web服务器可能使用GUID,另一种可能使用int或字符串-因此你走的时候要小心