我将 JSF、Hibernate 和 CDI 与 Weld 一起使用。我的应用程序分为:视图(xhtml)、控制(请求/会话/视图范围的 Bean)、模型(实体)和业务(BO 标记为应用范围的 bean)。
我尽量让模型层和业务层与视图和控制层分离,这意味着如果要更改所有 xhtmls + 控制 bean,则可以在不影响业务层和实体的情况下进行。
我的问题是:业务层中有很多方法需要知道谁是登录用户(或至少是他的个人资料),因为这会影响将返回给控制层的结果。
例如:当请求编辑用户列表时,管理员将收到一个包含所有注册用户的列表,而经理将收到一个仅包含“低于”其个人资料的用户的列表。
我不想将我的会话 Bean(包含登录用户)注入我的业务层,因为这会导致耦合(这意味着我无法随时更改我的控制/视图层)。
现在我通过将登录用户作为我的 BO 方法的参数传递来做到这一点,但对我来说“感觉”是错误的。我一直认为控制层可以将它想要的任何人作为登录用户传递,而我的业务层永远不会知道它。
我最后的问题是:
- 我这样做的方式有什么问题吗?还是我想太多了?
- 有更好的方法吗?