【问题标题】:@Named versus @Model - CDI vs/and ManagedBean@Named 与 @Model - CDI 与/和 ManagedBean
【发布时间】:2014-06-12 02:14:27
【问题描述】:

我想知道这篇解释从 JSF 直接访问 EJB 的文章:http://www.mastertheboss.com/cdi/context-dependency-injection-with-jboss-weld

我明白,使用 CDI,您可以注入和访问每种 bean 类型,包括来自层远端的实体 bean。

但是。

[问题 1]:我应该丢弃 @Model 控制器并仅将 @Named 应用于所有类吗?这种放弃了有JSF --> ManagedBean--> EJB --> EntityBean 到JSF --> EJB --> EntityBean 的做法。我只是觉得这个额外的 ManagedBean 给我带来了额外的层,但并没有太多好处。

[问题 2]:在什么情况下您仍希望维护额外的 Controller 层?

谢谢

【问题讨论】:

    标签: jsf-2 cdi managed-bean


    【解决方案1】:

    我不认为有一个普遍的答案。这取决于您的控制器,两者都是有效的架构。

    关键是你的控制器是否需要容器提供的服务。

    例如,如果您的控制器应该在事务之外执行,则证明额外层是合理的。

    但是,如果可以,请始终倾向于简单。如果您的应用程序足够简单,只有三层,那么不要过于复杂。

    就用@Named 替换@Model 而言,@Model 只是@RequestScoped @Named bean 的快捷方式。如果您希望 bean 具有其他范围,请仅将 @Model 替换为 @Named。

    【讨论】:

      【解决方案2】:

      充分利用整个平台的最佳方式是使用 CDI 作为控制器层(接收来自基于 JSF 的前端的请求)并在内部将业务逻辑委托给 EJB 或其他 CDI bean。我不会使用 JSF ManagedBeans,因为这个概念在 Java EE 7 中已被弃用,而是支持 CDI 编程模型。

      控制器可用于始终转换数据类型,分离前端和后端模型。

      【讨论】:

        【解决方案3】:

        我认为方程式应该是:

        JSF = View (.xhtml) + Controller (ManagedBean)
        EJB = Model
        

        除非您将整个后端逻辑放在ManagedBean 中,否则直接从View 跳转到Model 是不可跳过的,这显然不是一个好习惯。

        【讨论】:

          猜你喜欢
          • 2013-03-03
          • 2011-09-28
          • 1970-01-01
          • 2012-02-07
          • 1970-01-01
          • 1970-01-01
          • 2012-11-01
          • 1970-01-01
          相关资源
          最近更新 更多