Was ist der Punkt der Fassade in Java EE?
Bin ich nicht wirklich verstehen, den Punkt der Fassade.
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();
}
}
Wenn ich in diesem code, und dann habe ich ein EJB-wie diese.
@Stateless
public class WrapSpecFacade extends AbstractFacade<WrapSpec> {
@PersistenceContext
private EntityManager em;
@Override
protected EntityManager getEntityManager() {
return em;
}
public WrapSpecFacade() {
super(WrapSpec.class);
}
}
Was ist der Punkt von diesem? Warum nennen dies eine Fassade? Für mich ist es nur eine abstrakte Klasse, die Gruppen ähnlicher Funktionalität. Danke.
InformationsquelleAutor der Frage Drew H | 2011-01-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fassade ist ein Entwurfsmuster. Ein Muster ein software-Muster ist ein Satz von Regeln, um zu organisieren-code und eine bestimmte Struktur auf. Einige Ziele können erreicht werden, indem ein Muster zu verwenden.
Ein design pattern wird eingesetzt bei der Gestaltung der Anwendung.
Des Fassade-Musters ermöglicht Programmierern, um eine einfache Schnittstelle für Objekte, die andere Objekte benutzt.
Betrachten Sie arbeiten mit einer sehr komplexen Gruppe von Klassen, die alle der Umsetzung Ihrer eigenen Schnittstellen.
Gut, Sie wollen, um eine Schnittstelle zu stellen nur einige Funktionen von vielen, die Sie haben.
Dadurch erreichen Sie eine code Einfachheit, Flexibilität, integration und lose Kopplung.
Fassade, in deinem Beispiel, wird verwendet, um zu verwalten Kopplung zwischen vielen Akteuren. Es ist ein design-Problem. Wenn man viele Komponenten interagieren miteinander, je mehr Sie gebunden sind, desto schwieriger wird es sein, Sie zu erhalten (ich meine code-Wartung). Fassade ermöglicht es Ihnen, zu erreichen, eine lose Kopplung, die ein Ziel, ein Programmierer sollte immer versuchen zu erreichen.
Folgendes:
Wenn Sie ändern mussten, business-Logik in einer Klasse verwendet, die von Ruf 1 oder Ruf 2..., indem Sie nicht die änderung der Oberfläche, Sie würde sich nicht ändern müssen, alle Klassen, sondern nur die Klasse innerhalb der Methode verwendet, die von einer der interface-Methoden der ersten beiden Klassen.
Fassade ermöglicht dieser Mechanismus verbessern.
Tut mir Leid, aber ich merke, dass es nicht so wunderbar. Design patterns sind stark in der software-Industrie, und Sie können sehr nützlich bei der Arbeit an großen Projekten.
Sie könnte darauf hinweisen, dass Ihr Projekt ist nicht so groß und das mag wahr sein, aber die Java-EE-Ziele zu helfen, business-und enterprise-application programming. Das ist, warum manchmal das Fassaden-Muster ist standardmäßig benutzt werden, (einige IDEs benutze es auch).
InformationsquelleAutor der Antwort Andry
In der Regel dieses Muster wird verwendet, um entweder verstecken die Umsetzung der zugrunde liegenden Klassen präsentiert wird ein interface, oder zur Vereinfachung der zugrunde liegenden Implementierung von etwas, das Komplex sein kann.
Einer Fassade kann eine einfache Schnittstelle zur Außenwelt, aber unter der Haube Dinge wie das erstellen von Instanzen anderer Klassen, Transaktionen zu verwalten, mit Dateien oder TCP/IP-verbindungen-alle Sachen, die Sie abgeschirmt werden von durch die vereinfachte Schnittstelle.
InformationsquelleAutor der Antwort Griff
In Ihrem bestimmten Kontext, ist das nicht wirklich eine Fassade. Was haben Sie in, der code ist im Prinzip ein DAO (Data Access Object).
Ein DAO-kann gesehen werden als eine Fassade für DB-Operationen, aber das ist nicht Ihr Hauptzweck. Es will vorwiegend ausblenden der DB-Interna. In deinem Beispiel, wenn Sie die Umschaltung der zugrunde liegenden storage-system auf XML-Dateien oder einige Schlüssel-Wert-Speicher wie HBase, können Sie immer noch die Methoden definiert, die "Fassade" und keine änderung erforderlich ist, in den client-code.
Einer (traditionellen) Fassade beschäftigt sich mit komplexen designs, die müssen versteckt werden und von den Kunden. Statt der Freilegung einer komplexen API und komplexen Strömungen (diese bekommen Sie von diesem service, geben Sie Sie an diesem Konverter erhalten Sie das Ergebnis und überprüfen Sie es mit dieser und dann schicken Sie es an diese anderen Dienst), Sie haben nur die Kapseln alle, die in eine Fassade und einfach über eine einfache Methode, um die clients. Diese Weise, zusammen mit der Tatsache, dass Ihr API ist sehr viel einfacher zu bedienen, Sie sind auch frei, zu ändern, die zugrunde liegende (komplexe) Implementierung, ohne zu brechen Ihren Kunden-code.
InformationsquelleAutor der Antwort Costi Ciudatu