Realmente me gustó el marco de aplicación de JBoss Seam. Dado que la noción de inyección/inyección y la estrecha integración entre JSF/EJB/JPA es relativamente escasa entre los frameworks de aplicaciones Java, estaba buscando algunos buenos recursos para los patrones de diseño y las mejores prácticas para usar este framework. He echado sobre los ejemplos y varios libros sobre el tema. Sin embargo, estoy más interesado en los patrones de diseño del mundo real que se comparan con los patrones de diseño J2EE tradicionales. Por ejemplo, DAO tradicionales frente a EntityHome/EntityQuery. ¿Dónde debe realizarse la lógica de negocios? En clases de acción? ¿O en clases de servicio dedicado? Realmente agradecería cualquier idea que los experimentados desarrolladores de Seam puedan dar. ¡Gracias!JBoss Seam Design Patterns?
Respuesta
Hay muchos patrones útiles que puede usar.
enfoque tradicional
view >> controller >> service >> domain
que puede traducirse Para
/**
* 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);
}
}
Si usted tiene algunas acciones , que necesita manipular componentes JSF en el lado del servidor, utilice un controlador como se muestra arriba puede ser una buena idea
También puede usar
view >> service >> domain
Es básicamente el mismo enfoque se muestra arriba pero sin controlador
o utilizando una función de patrón de mediador mediante el uso de EntityHome/EntityQuery
view >> domain
Registre su EntityHome de la siguiente manera /WEB -INF/components.xml
<framework:entity-home name="accountHome" entity-class="br.com.ar.seam.Account"/>
Ahora usted puede crear un alias mediante el uso de elementos de fábrica
<factory name="account" value="#{accountHome.instance}"/>
/**
* view
*
* Notice account will be evaluated as accountHome.instance
*/
<h:commandButton value="Deposit" action="#{account.remove}"/>
Nada más. Tenga en cuenta cuando se utiliza EntityHome (APP) o HibernateEntityHome (Hibernate) que en general tienen que reemplazar algunos métodos para mejorar el rendimiento de la siguiente manera
@Name("accountHome")
public class AccountHome extends EntityHome<Account> {
/**
* Override any method you want right here
*/
}
Sobre la lógica de negocio ??? Puede colocarlo dentro de su capa de servicio o puede usar un enfoque de diseño basado en dominio. Consulte here que se ajuste mejor a lo que desea
Pruebas: utilice Seam bundled Testing components. Eche un vistazo a Seam ejemplos directorios Para obtener una visión general de cómo puede realizar Pruebas sin implementación
Si es posible, use seam-gen Para generar su proyecto. Seam in Action book, capítulo 2, puede da una buena idea de cómo iniciar las capacidades de seam-gen. lea atentamente.Cualquier costura de generación genera proyecto se puede abrir y probado en NetBeans y Eclipse
componentes JSF: Tome un vistazo a here
Hay más: No utilice @ fuera Jection más. Use @Factory en su lugar. @ Out-jection quedará obsoleto a favor del método @Factory.
Creo consultas es mejor guardados dentro de un archivo externo, porque
- Es legible
- Es fácil de mantener
En la siguiente manera
<?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>
uno de los buenos, don' t
Otro recurso va aquí (formato pdf)
- 1. Mobile Development Architecture & Design Patterns
- 2. JBoss Seam tutoriales
- 3. Impossible tech stack? Jboss/Seam/Resteasy/Hibernate/Maven
- 4. ¿Es posible usar Seam en un servicio sincronizado de JBoss?
- 5. cambiando anotaciones de JBoss Seam a CDI (JEE6)
- 6. spring mvc vs seam
- 7. Enterprise Architecture Anti-patterns
- 8. C#: Enum anti-patterns
- 9. WCF Service authorization patterns
- 10. JavaScript singleton patterns - differences?
- 11. ¿Alguien ha ejecutado exitosamente pruebas de integración con Jboss embedded, Seam y Maven?
- 12. Qué tan popular es el Seam Framework
- 13. CFML Design Pattern resources?
- 14. Seam bijection and Weld
- 15. Seam excepciones centralizadas
- 16. OO Design vs Database Design
- 17. EJB3 Business Logic Patterns & Practices
- 18. Java Singleton Design Pattern: Preguntas
- 19. Identificación dinámica en JSF/Seam
- 20. C# -Four Patterns in Asynchronous execution
- 21. Backbone Design
- 22. ordenando dinámicamente un NamedQuery? Seam/Hibernate/JPA
- 23. Seam 2.x e Hibernate 3.5?
- 24. JBoss 7.1.1 y JBoss Web Native
- 25. Puerto MBean de JBoss 4.x a JBoss 7
- 26. Comparaciones del mundo real de Glassfish y JBoss 5?
- 27. Design RESTful URI
- 28. C# Constructor Design
- 29. C# Design Questions
- 30. OOP Game Design Theory
Wow! Ahora que es una respuesta detallada. ¡Muchas gracias por su visión! – Shadowman
Derecha, Arthur es el tipo Seam aquí :) – BalusC
Buena respuesta. Pero me mantendría alejado de Seam Application Framework. (EntityHome, EntityQuery, etc.) –