在我的authenticationService的登录方法中,我需要创建一个cookie并在cookie中设置会话ID。
在控制器操作中将请求对象传递给我的服务层是不好的做法吗?
public void login(String email, String password) {
User user = someService.validate(email, password);
if(user != null) {
// create session
// set cookie ????
}
}
我的控制器操作将调用上面的登录方法,混淆了我应该创建的位置以及为我的cookie设置会话ID。
在服务层中使用它是有道理的,但我的登录方法然后紧紧绑定到Web应用程序。
我这样做了吗?
答案 0 :(得分:6)
是(对“不良做法”),否(对“做这个权利”)。
服务层应该与任何与网络有关的东西完全分离。仅Web层应负责管理Web层工件,包括cookie。
这样即使不存在cookie(例如桌面或CLI应用程序),也可以使用该服务。它还允许在不考虑Web层的情况下测试服务,这是有道理的 - 服务不关心如何身份验证发生,或之后发生的事情 - 仅使用用户名和密码的工作原理。
答案 1 :(得分:1)
是。尝试尽快将网络消息转换为域对象,并且在您确定整个消息格式良好并获得授权之前不要采取任何操作。
如果您可以隔离处理来自实现业务规则的代码的混乱不受信任输入的代码,并根据域对象实现更改,从将响应格式化为外部世界的代码,您的代码将更易于维护和安全
如果您可以将服务分成:
然后您可以将单元测试集中在2上,而无需担心创建和填充存根请求和响应对象。