Software!
It wasn’t something that existed 100 years ago.
So, we don’t have a proper discipline for it.
Let’s look at a case study of a double-entry book keeping system. Anyone who does accounting knows that you’re supposed to keep 2 records one on the debit side and one on the credit side. Now, the thing is it took people 500 years to finally realize that double-entry book keeping was a good idea. When they realized it, it because a legal system. Now, if you don’t use a double entry bookkeeping system you’re liable to legal action.
The point is, when anything is relatively new there is no proper discipline around it and it’s also true for software. But we software developers are smart so, we mimic other disciplines into our own.
For example :
The idea of Accounting method is amortized analysis is taken from accounting discipline.
Now, let’s look at an example to understand app architecture.
Let’s say you want to buy chips.
Where would you go to buy it ?
Probably some general store near you right ?
Let’s look at this in a diagram.
But store isn’t where the chips are made !
Chips are manufactured in some kind of factory.
So, this means that the store need to talk to the factory to get the chips in the store right ?
You know that the chips are made on the factory, but you don’t go directly to a factory to get chips. That’s stupid and the factory wouldn’t even give the chips to you anyways.
Now, here comes the interesting part.
The store and factory have their own logic of doing stuff.
They might have their accounting done differently.
They might have their own shipping logic and one noticeable difference is that the price per chip will vary between store and factory.
Now, let’s relate this to software.Imagine the factory is the database, you don’t give the user direct access to the database. It’s stupid. You’d probably want to have some sort of mediator between the database and the user.
And by the way, you can have a lots of mediators. In our example, it’s like their might be a shipping company between the store and the factory that transports the data from factory to the store.
This is how you’d like your software to be.
You’d want to have these mediators in your software too.
These mediators then have their own logic which is independent of other mediators.