Quel est le but d'une façade en Java EE?
Je ne suis pas vraiment à comprendre le point de la façade.
public abstract class AbstractFacade<T> {
private Class<T> entityClass;
public AbstractFacade(Class<T> entityClass) {
this.entityClass = entityClass;
}
protected abstract EntityManager getEntityManager();
public void create(T entity) {
getEntityManager().persist(entity);
}
public void edit(T entity) {
getEntityManager().merge(entity);
}
public void remove(T entity) {
getEntityManager().remove(getEntityManager().merge(entity));
}
public T find(Object id) {
return getEntityManager().find(entityClass, id);
}
public List<T> findAll() {
CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
cq.select(cq.from(entityClass));
return getEntityManager().createQuery(cq).getResultList();
}
public List<T> findRange(int[] range) {
CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
cq.select(cq.from(entityClass));
Query q = getEntityManager().createQuery(cq);
q.setMaxResults(range[1] - range[0]);
q.setFirstResult(range[0]);
return q.getResultList();
}
public int count() {
CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
Root<T> rt = cq.from(entityClass);
cq.select(getEntityManager().getCriteriaBuilder().count(rt));
Query q = getEntityManager().createQuery(cq);
return ((Long) q.getSingleResult()).intValue();
}
}
Si j'ai ce code et puis j'ai un EJB comme ça.
@Stateless
public class WrapSpecFacade extends AbstractFacade<WrapSpec> {
@PersistenceContext
private EntityManager em;
@Override
protected EntityManager getEntityManager() {
return em;
}
public WrapSpecFacade() {
super(WrapSpec.class);
}
}
Quel est le point de tout cela? Pourquoi appeler cela une façade? Pour moi, c'est juste une classe abstraite que les groupes des fonctionnalités similaires. Merci.
source d'informationauteur Drew H
Vous devez vous connecter pour publier un commentaire.
Façade est un modèle de conception. Un modèle, un logiciel de configuration, est un ensemble de règles, dans le but d'organiser et de donner une certaine structure. Certains objectifs peuvent être atteint en utilisant un modèle.
Un modèle de conception est utilisé lors de la conception de l'application.
La Façade modèle permet aux programmeurs de créer une interface simple pour les objets à utiliser d'autres objets.
Envisager de travailler avec un groupe très complexes de classes, de tous la mise en œuvre de leurs propres interfaces.
Eh bien, vous voulez fournir une interface seulement à exposer certaines fonctionnalités des nombreux que vous avez.
Ce faisant, vous obtiendrez le code de la simplicité, de la souplesse, de l'intégration et lâche de couplage.
Façade, dans votre exemple, est utilisé pour gérer le couplage entre de nombreux acteurs. C'est un problème de conception. Lorsque vous avez de nombreux composants qui interagissent ensemble, plus ils sont à égalité, le plus il sera difficile de les maintenir (je veux dire le code d'entretien). Façade vous permet d'accéder à couplage lâche, qui est un objectif, un programmeur doit toujours essayer de les atteindre.
De considérer les éléments suivants:
Si vous deviez changer de logique d'entreprise situé dans une classe utilisée par call1 ou call2... en ne changeant pas l'interface, vous n'auriez pas besoin de changer toutes ces classes, mais juste la classe à l'intérieur de la méthode utilisée par l'une des méthodes d'interface des deux premières classes.
Façade vous permet d'améliorer ce mécanisme.
Je suis désolé, mais je me rends compte qu'il n'a pas l'air si merveilleux. Les Design patterns sont très utilisés dans l'industrie du logiciel, et ils peuvent être très utiles lorsque l'on travaille sur de grands projets.
Vous pouvez remarquer que votre projet n'est pas très grande et c'est peut-être vrai, mais la Java EE vise à aider les entreprises et au niveau de l'entreprise de programmation de l'application. C'est pourquoi, parfois, la façade modèle est utilisé par défaut (quelques IDEs utiliser trop).
Généralement, ce modèle est utilisé pour masquer la mise en œuvre de la sous-classes, il présente une interface, ou pour simplifier l'implémentation sous-jacente de quelque chose qui peut être complexe.
Une façade peut présenter une interface simple pour le monde extérieur, mais sous le capot de faire des choses comme créer des instances d'autres classes, de gestion de transactions, gérer les fichiers ou les connexions TCP/IP -- tous les trucs que vous pouvez être à l'abri de par l'interface simplifiée.
Dans votre contexte particulier, ce n'est pas vraiment une Façade. Ce que vous avez dans ce code est en fait un DAO (Data Access Object).
Un DAO peut être vu comme une Façade pour DB opérations, mais ce n'est pas son but principal. Il vise notamment à masquer la DB à l'intérieur. Dans votre exemple, si vous êtes à la commutation, le stockage sous-jacent système de fichiers XML ou à certaines key-value store, comme HBase, vous pouvez toujours utiliser les méthodes définies dans cette "Façade" et aucun changement n'est requis dans le code client.
Un (traditionnel) de la Façade traite de conceptions complexes qui doivent être masqués par les clients. Au lieu d'exposer un complexe de l'API et de flux complexe (obtenir ce à partir de ce service, le passer à ce convertisseur, obtenir le résultat et le valider avec cela et puis de l'envoyer à cette autre service) vous encapsuler le tout dans une Façade et simplement exposer une méthode simple pour les clients. De cette façon, ainsi que le fait que votre API est beaucoup plus facile à utiliser, libre à vous de modifier le sous-jacent (complexe) de la mise en œuvre sans casser vos clients code.