For a long time, I have been thinking about client technologies and could not decide which one to choose. There is the web community and the the desktop community. Both of them have good reason for or against a technology. My problem is that I am pushed towards a web/browser-based solution which is by far not my preferred interface. Browser-based solution do not provide the comfort of interactivity a desktop solution can provide. Also, it relies on an existing and fast web access. But these solutions are the trend, hence, it is hard to argue against those.
The other day I came across an article in a German Java magazine which discusses different client technologies and presents an alternative I am happy with.
Fat Client. Historically, before the rise of the web, Fat Clients were the predominant technology. Deployment was one of the crucial issues here. Due to their monolithical structure, Fat Client applications are difficult to maintain and therefore, development costs were rather high.
Thin/Zero Administration Clients. They came up with the popularity of the Internet and solved at least the problem of deployment and they were less expensive. But browser incompatibilities, long loading times, and the lack of integration into web-based application prevented a lasting success. Applets were representatives of this architecture.
Ultra Thin Clients. These clients were very easily to install but they lacked interactivity. At the time, DHTML and Java Script was strictly forbidden.
Rich Clients. Because customers are rather interested in user-friendly GUIs, Rich Clients became popular again. Romain Guy goes one step further and presents an approach called Filthy Rich Clients. The clear emphasis is on the UI – Clients should have a really awesome and modern look including shadows, transparency, animations, etc. as known from the Mac.
Thin-/Fat Browser Applications. Deployment was no high priority issue for Rich Clients, but when the discussion on installation facilities started, solutions like Java WebStart did not become as visible as one might expect. Instead, a step back to asynchronous browser applications followed which were able to work offline. However, Data, Logic and Gui were still tied together such that reuse of components involved some investment of time.
Smart Interactive Clients. Adam Bien proposes in the article to separate GUI and Logic in Desktop Clients as it is done in application-framework architectures. That is, the same logic can be reused in server as well as in client applications. The difference is the GUI which in case of Java Desktop could be Swing and in case of a application-frameworks could be some web framework. The logic layere is accessed through some persistence layer. The client doesn’t know anything about the layer, it only knows logic action he can perform.
Have a look at Google Maps and Google Earth. Both share a common logic but Google Earth provides rich interactivity actions which include far more effort to be developed in a web framework.
Concluding, if you start to implement a new application and do not know what kind of architecture to choose, think in layers and consider persistency. At some point, you’ll make a decision for a browser-based or a desktop-based application. All you need to do is to implement the GUI.