I hope you understand with the title I wrote, in this simply I just want to "reflecting" the way I build a web app, since its been a long time I don't build it anymore. I hope this post is quite short so I can avoid any "detailed" topic that frequently I did.
Basically we use three-tier architecture with 3 layers while creating the application:
- Presentation Layer (Basically V in MVC)
- Application Layer (C in MVC)
- Data Layer (M in MVC)
I use MVC pattern to keep this post short and since MVC pattern is famous enough. Let's breakdown those 3 tier/layer by using some "library" as an example:
- Presentation: React, Jinja, Handlebars, plain HTML.
- Application: Express, Django, Rails.
- Data: Postgres, MariaDB, MongoDB.
Model is just an abstraction on top of Data Layer, so we can communicate with database in agnostic way: No matter are you using Postgres/SQLite, all you need to care is talk with them either via Active Record/Data Mapper pattern and let them abstract the driver layer.
I don't do TDD but sometimes writing an automated test from Unit to Integration test just to make sure I can sleep tight. On Frontend, frequently I just write E2E testing (and snapshot test), because frontend world is too complex.
Thanks to Open Source, now I don't need any platform-specific deployment strategies since Containerization is cool. Previously, I need to deal with platform-specific strategy–mostly delivered via Git–like Capistrano for Ruby and Fabric in Python.
There is agnostic way like using supervisor, but polliting my server with many environment is not my typical.
Today I just use Docker (and Docker Compose) to do some deployment, its pretty good. Still don't interesting with K8s (orchestration way) and FaaS (artifact thing).
It just a boring stack: Tmux, Vim, and Firefox. But I enjoy enough, probably its not the recommended stack choice.
Now I know how to build a Web Application by reflecting my "frequent" way to do it, lets write some code?