2010-06-13 1 views
7

Ich bin dabei, ein großangelegtes System zu entwickeln, und ich kämpfe mit welcher Richtung ich fortfahren soll. Ich habe schon viele Java-Web-Apps gemacht und ich habe viel Erfahrung mit Servlet-Containern und GWT und etwas Erfahrung mit Spring. Das Problem ist, dass die meisten meiner Webapps zusammengeworfen wurden, nur um ein Beweis des Konzepts zu sein, und mit was ich kämpfe, ist, welches Set von Frameworks zu verwenden ist. Ich brauche sowohl eine browserbasierte Anwendung als auch einen Webdienst, der den Zugriff von mobilen Geräten (Android und iPhone für den Moment) unterstützt. Idealerweise möchte ich dieses System so gestalten, dass ich nicht alle meine Servlets für jeden Client (Browser und Telefon) neu schreibe, obwohl es mir nichts ausmacht, ein paar kleine Checks dort zu haben, um die Daten.Vorschläge zum Entwerfen einer groß angelegten Java-Webanwendung von Grund auf

Darüber hinaus, obwohl ich der einzige Entwickler jetzt bin, wird das nicht notwendigerweise der Fall sein, und ich würde gerne etwas entwerfen, das sowohl in Bezug auf Verkehr und Anzahl der Entwickler gut skaliert (isn ' Es ist nur ein Alptraum zu pflegen).

Also, wo ich jetzt bin, plant GWT zu verwenden, um die browserbasierte Schnittstelle zu entwerfen, aber ich habe Probleme damit, diesen Code wiederzuverwenden, um die Schnittstelle (am wahrscheinlichsten xml) für die mobilen Geräte zu präsentieren. Die Verwendung von GWT RPC würde es, glaube ich, relativ einfach machen, den gesamten AJAX im Browser auszuführen, könnte aber die Erzeugung von XML für die Mobiltelefone erschweren. Außerdem mag ich die Idee, etwas wie Hibernate für Persistenz und Spring Security zu verwenden, um das Ganze zu sichern. Ich bin mir nicht sicher, wie gut diese mit GWT zusammenarbeiten werden (ich denke, Hibernate sollte in Ordnung sein ...)

Es gibt natürlich viel mehr als ich hier vorgestellt habe, aber ich habe versucht zu geben dir die 5-Minuten-Übersicht. Ich bin ein bisschen ratlos und frage mich, ob irgendjemand in der Community irgendwelche Erfahrungen von diesem Ort hatte. Macht das, was ich versuche, Sinn? Ist es realistisch? Ich habe keinen Zweifel, dass ich alle diese Frameworks die gleiche Sprache sprechen lassen kann, ich frage mich nur, ob es meine Zeit wert ist, mit ihnen zu kämpfen. Fehle ich auch einen Rahmen, der wirklich nützlich wäre?

Vielen Dank im Voraus und sorry für die relativ weit gefasste Frage ...

Chris

+0

Schließen Sie dies nicht, es ist eine gültige Frage, welche Punkte zu beachten sind, bevor Sie mit der Erstellung eines großen Projekts beginnen. –

Antwort

3

ich spezifisch hier recht sein würde, da ich einige relevante Erfahrung habe. Nicht alles, was ich schreibe, wird zutreffen, aber ich hoffe, dass etwas tut.

Meine 1. Empfehlung wäre, jeden Code, der direkt von einem Framework abhängig ist, so "dumm" wie möglich zu halten. Wenn Sie können, betrachten Sie einen solchen Code als mehr oder weniger verfügbar (Implementierungs weise, API-Verträge, die den Kunden offen stehen, müssen natürlich stabil sein).

Konzentrieren Sie sich darauf, was Ihre Anwendung einzigartig macht, und versuchen Sie, unabhängig von GWT usw. zu machen. Die facade pattern ist etwas, das ich empfehlen kann - halten Sie die App-spezifische Logik hinter einem und exponieren Sie es durch die Verdrahtung der Präsentationsebene mit ihm gedient hat uns gut. Wenn Ihr Back-End von der Infrastruktur von Drittanbietern abhängt (über Webdienste usw.), entkoppeln Sie diese Abhängigkeiten von Ihrem Code mit der adapter pattern.

Ich habe den größten Teil meiner Arbeitszeit in den letzten 5 Jahren damit verbracht, etwas zu bauen, das dem entspricht, was Sie auf viele Arten beschrieben haben. Heute ist es eher ein App-Framework als eine App - es hat ein paar verschiedene Browser-Schnittstellen (WAP/Standard-Web + Ajax/Facebook-App), eine Schnittstelle für 2-Wege-SMS-Nutzung und eine REST/XML-Schnittstelle für dicke mobile Clients - BREW , iPhone, Android und Blackberry.

Wenn es um Frameworks geht, haben wir für die Persistenz Hibernate verwendet. All die verschiedenen Teile des Codes sind mit Spring verbunden. Die Browser-Schnittstellen wurden von Struts (1.x) nach Wicket portiert. Die SMS- und Mobile-Client-Schnittstellen sind auf Restlet aufgebaut.

Die Verwendung mehrerer verschiedener Darstellungsschicht-Frameworks (wie Wicket und Restlet in unserem Fall) war kein Problem, solange dieser Code schlank gehalten wird und die Geschäftsregeln so weit wie möglich ausgeschlossen werden. Es gibt nichts, das sagt, dass Ihre Browser-Schnittstelle in die gleiche WAR wie Ihre mobile Client-Schnittstelle verpackt werden muss - mit Spring können Sie problemlos mehrere Web-Anwendungen mit der gleichen Fassade verbinden. Dies war für uns besonders hilfreich, um mehreren Entwicklern zu ermöglichen, an gut isolierten Teilen der Anwendung zu arbeiten.

Meiner Meinung nach hat der Versuch, die maximale Wiederverwendung von Code in der Präsentationsschicht zu erreichen, mehr Schaden als Nutzen verursacht. Das war immer der flüchtigste Teil unserer Anwendung, jenseits dessen, was wir erwarten konnten.

+0

Vielen Dank für Ihre ausführliche Antwort. Ich denke du hast ein paar wirklich großartige Vorschläge gemacht, die mir sehr helfen werden. Ich schätze Ihre Erfahrung sehr! –

Verwandte Themen