gpt4 book ai didi

jsf - JBoss Seam 设计模式?

转载 作者:行者123 更新时间:2023-12-04 14:35:34 27 4
gpt4 key购买 nike

关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。












想改进这个问题?将问题更新为 on-topic对于堆栈溢出。

3年前关闭。




Improve this question




我真的很喜欢 JBoss Seam 应用程序框架。由于 JSF/EJB/JPA 之间的注入(inject)/输出和紧密集成的概念在 Java 应用程序框架中相对稀缺,因此我一直在寻找一些很好的设计模式资源和使用该框架的最佳实践。我已经翻阅了有关该主题的示例和几本书。但是,与传统的 J2EE 设计模式相比,我对现实世界的设计模式更感兴趣。例如,传统的 DAO 与 EntityHome/EntityQuery。业务逻辑应该在哪里执行?在行动课上?还是在专门的服务类?我非常感谢有经验的 Seam 开发人员可以提供的任何见解。谢谢!

最佳答案

您可以使用许多有用的模式。

传统方法

view >> controller >> service >> domain

可以翻译成哪个
/**
* view
*/
<h:commandButton value="Deposit" action="#{accountController.removeAccount(account)}"/>

/**
* controller
*/
@Name("accountController")
public class AccountController implements Serializable {

/**
* Usually a plain POJO or EJB
*/
private @In AccountService accountService;

public void removeAccount(Account account) {
accountService.removeAccount(account);
}

}

/**
* service
*/
@Name("accountService")
public class AccountServiceImpl implements AccountService {

private @In EntityManager entityManager;

public void removeAccount(Account account) {
entityManager.remove(account);
}

}

如果你有一些 Action 需要操作 JSF 组件 在服务器端,使用如上所示的 Controller 可能是个好主意

你也可以使用
view >> service >> domain

基本上和上面显示的方法相同 但没有 Controller

或者通过使用 EntityHome/EntityQuery 使用内置中介模式
view >> domain

按如下方式注册您的 EntityHome/WEB-INF/components.xml
<framework:entity-home name="accountHome" entity-class="br.com.ar.seam.Account"/>

现在您可以创建 别名 通过使用工厂元素
<factory name="account" value="#{accountHome.instance}"/>

/**
* view
*
* Notice account will be evaluated as accountHome.instance
*/
<h:commandButton value="Deposit" action="#{account.remove}"/>

没有其他的。请记住,在使用 EntityHome (JPA) 或 HibernateEntityHome (Hibernate) 时,您通常需要重写一些方法来提高性能,如下所示
@Name("accountHome")
public class AccountHome extends EntityHome<Account> {

/**
* Override any method you want right here
*/

}

关于业务逻辑???您可以将其放在服务层中,也可以使用领域驱动设计方法。见 here哪个更适合你想要的

测试:使用 Seam 捆绑的测试组件。看看缝 示例 目录 了解如何在不部署的情况下执行测试

如果可能的话,使用 seam-gen 来生成你的项目。 Seam in Action 一书第 2 章可以很好地了解如何启动 seam-gen 功能。 仔细阅读 .任何 seam-gen 生成的项目 可以在 NetBeans 和 Eclipse 中打开和测试

JSF 组件:看看 here

还有更多:不要再使用@Out-jection。请改用@Factory。 @Out-jection 将被弃用,取而代之的是 @Factory 方法。

我认为查询最好存储在外部文件中,因为
  • 可读
  • 可维护

  • 如下
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
    <query name="GIFT_CARDS_WITH_BUYER">
    <![CDATA[
    from
    GiftCard c
    left join fetch
    c.buyer
    where
    c.recipientNotificationRequested = 1
    ]]>
    </query>
    <query name="GIFT_CARDS_WITHOUT_NO_RELATIONSHIP">
    <![CDATA[
    from
    GiftCard
    ]]>
    </query>
    </hibernate-mapping>

    好看的不要

    另一个资源在这里(pdf格式)

    JBoss Seam:Agile RIA Development Framework

    关于jsf - JBoss Seam 设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3391592/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com