Recently I’ve come to the realization that almost everything in software could be packaged separately as a ( Micro ) Service.
- Ideally it could scale up by putting a load balancer in front of every service and turn on or off containers and/or virtual machines per need.
- Idealistically it could work without human intervention at the back-end side.
If every step of their job is formalized and then programmed and started on some machine – somewhere – the users and consumers should be able to complete their job 100%.
Almost every functionality could be exposed internally or – why not – externally. The common practice is over HTTP, but other communication channel could also be used – like cache and messaging systems. This could include things – as small as true or false flags – to big distributed block-chains – associated to entity – global (static) configuration, accounting table (like Bitcoin) – or wrappers for a service or per user/profile personalization… That’s why the big cloud providers have expanded their suites so much.
The sneaky part is when corporations want and need fine – tuned control. Then, every corporations implements and re-implements the same feature, just under different “legal hat”. And when developers need some external service – the smart way is to create wrappers, facades or interfaces. The external dependency could be easily swapped if the developers that consume of the wrappers use only internal dependencies. The same thing is present in applications on the front and native ends – with the increase of modularization, orchestration and architecturization in layers and design patterns.
Here are some things that I’ve done:
- Embraced MVVM (or similar) Pattern in in the newer developments that my Generator App outputs – like Android, Flutter, Java Spring.
- BETA App – for File Storage – Service Provider. The file system tree is very much just a hierarchical abstraction. The real contents is originally files, but they could also be – notes, list of commands or something else. The beauty of capsulizing this functionality is – I could change the cloud provider, or even, plug-in my own implementation and I’ll just need to keep the interface the same.
- Different Apps for translating stuff – The original Translate App, Simple My Translate DB query App, Online User DB version of Translate App, I’ve also have a command line version for internal need. The benefit of capsulizing is having a cache of the translation calls and the option to swap Google Translate – if I wish to.
- Other more recent wrapper Services are
- IP White Listing Service – for the User Profiles of an App
- Unified App Distribution Service that is not bonded to concrete platform, thanks to the multi-platform capability of the Flutter Framework.
I have more ideas for wrappers and facades, so I could stop reimplementing the same functionalities in every app or service – with the highest priority for me, because of their spread – emails and push notifications . I wonder – do you have or wish some functionality wrapped for you that I could consider?