Ras*_*nke 9 java architecture ejb
在常见的MVC设计应用程序中,使服务层依赖于用户会话是一个坏主意吗?假设有一种服务方法从数据库中提取一些对象,并且您希望根据初始化调用的人返回不同的结果 - 例如,管理员可能获得10行对象,而普通用户可能只获得7行因为最后3个是"仅限管理员"的对象.解决这个问题的几种方法是:
最近,我开始越来越多地使用最后一种方法,因为它提供了一个干净的界面,并且使用起来非常实用.过滤器确保当前线程始终具有用户设置.这是不好的设计吗?我相信有些人可以将其视为从服务层到Web层的依赖,尽管我个人认为它们非常不相关.最大的后果是方法行为会因另一个类的状态而有所不同,这可能既是坏事也是好事.
你对此有何看法?如果这是一个糟糕的解决方案,那么什么会更强大?
我强烈建议使用aginst ThreadLocal风格的方法 - 它看起来像是一个"全局变量"设计气味太多了.这有很多问题,最值得注意的是:
在另外两种方法之间,我认为"这取决于":
另一种选择是将"上下文"对象传递到包含一组相关会话数据(即不仅仅是用户名)的服务层.如果您想最小化参数膨胀,这可能是有意义的.请注意它变成了一种"绕过"良好分层原则的方法.如果它只是"数据"那么它可能没什么问题,但是一旦人们开始在上下文中传递回调对象/ UI组件,那么你可能会走向有点混乱....
| 归档时间: |
|
| 查看次数: |
1136 次 |
| 最近记录: |