Application Architecture Options - From Developer Point Of View

There are a lot of different approaches you could choose from before start programming when an abstract idea about some application or a solution to a problem pops up in your head. if your idea has a web interface – the choices are even greater.

There are several programming languages with which you could code for web, desktop, mobile platforms – C#, Java, Python, C++ and so on. If you know different Programming Languages, the chosen one should be the most appropriate for the problem you are solving. Some languages put a lot of abstractions and are good for high level logic and stuff, other access the hardware and flip the bits directly with the most efficiency and speed. Other separation that is starting to disappear is between Object Orientated Languages and Functional ones. With each new version every language is starting to look like every other – with Object Orientated APIs, with functional features like lambda functions, optional variables and parameters, extensions and so on.

The second filter when choosing a programming language should be the one that you know best and with which you are most productive. It is good idea to know different languages and have in the bag different approaches, but at the end of the day your business logic awaits you and you should be fast in implementing it. Several people I know are language gurus and enthusiasts and are a little bit closed to using other languages than others. With the presence of Frameworks and APIs for every case and platform this probably is not a big deal or show-stopper and you could probably live with one language.

(KISS) Keep It Simple & Stupid – This approach is probably good for relatively small in size projects and applications. Why use jQuery, Some complex Framework with separation of business logic, user interface, database access,  fat Javascript – CSS framework, why use a back-end framework with multiple layers of abstraction and separation of architectural components, if the application to the end of its life will be small? If new stuff appears a total rework will be needed anyway. Why not keep it small and simple – as code, as number of dependencies and so on?

Model View Controller – MVC is one of the fundamental design patterns in programming for separating view from model, from controller (the business logic) especially when developing web sites, applications and platforms.  It has become such common pattern that it is even embedded in originally considered client-side technology like JavaScript.

Component-oriented frameworks – Component based frameworks can be found everywhere – on the server, on the client, on the desktop and on mobile platforms. My first personal touch with it, and the experience of my colleagues, was twenty years ago – with Borland Software. Then it got integrated in Microsoft Visual Studio. So some open source project grabbed it, because it is a concept and not a private technology.

Today, especially as a Java Developer, you have a lot of choices for component-oriented frameworks. The most famous ones and the ones that I have touched are – JSF, Apache Wicket, Google Web Toolkit and Vaadin. The last two are already integrated into my Database Application Generator Tool.

Another characteristic you could choose from when thinking of programming framework for the web is selecting a client-centric vs server-centric vs somewhere in the middle framework.

10 years ago a read an article from twitter that showed in a benchmark that the server rendering of html was the fastest, because when using client framework where the browser first loads the script and then the information and at the third step – visualizes the content, instead of in the first step – show the content – with some server-centric framework.

Another benefit is that server generated html is index-able better by the Search Engines. This plus is probably fading away because today, the spiders are clever and they act very much like a browser. The focus has transitioned from code, to speed (in term of responsiveness of the site, and the user experience.

A cons of server generated html – if generated manually and not by some framework – it is not so testable. Also if an application is coded in client-centric mode instead of server, some code and data caching and other optimizations could be applied.

Add comment