Why go to all of this trouble?
Almost everything can be switched out without affecting the other parts of the application
Can use the same architecture for other applications
Can easily modify functions of existing application without affecting the rest of the application