Friday, February 21, 2020

Technology for building modern web app architecture

Few years ago, MVC is a popular choice when designing web application. Both ASP.Net and JSP have full support for it. Basically in MVC, all logic happen on backend web server, and the process are triggered by client side http requests.

With the mobile devices get more and more popular, the native mobile app cannot reuse the existing backend service implemented in MVC, as native app or single paged mobile web app have different ways to render the view, so the view implementation embedded in tradition MVC does not work anymore.

In addition, handling web session data and refreshing page for each http request cannot provide the best user experience on mobile devices. One solution to solve the issue is moving all MVC related logic from server to client, and client will only send requests to server for retrieving model data. The mobile devices or browsers will download the client app package from server only once when app starts, after that, all logic runs on client side,  as if the app is installed on the device.

Certainly, the app still needs to send http requests to server to get or submit the business data, but server is no longer involved in UI rendering by any means, this separate sthe backend business logic from presentation logic, so the backend services can be reused by all kinds of client apps.

Client frameworks - Angular, Reactive and Vue were created for this purpose to create the single paged web application, correspondingly Ionic, Reactive native were created to create the mobile apps, these client side libraries use javascript and css styles to handle UI rendering, so there is no need to return each html page from server.

On the server side, by removing the UI related logic, the focus is now providing the date to client. RestAPIs, WebAPIs and microservices based on json or xml are used to communicate between client and server services, and between services on server sides. Both asp.net and spring provides good support for this purpose.

The AWS, Azure and Google cloud have become the good places to deploy the container based microservices, so technologies like kubernate and docker also become important for web app developers.