In my programming class, my teacher said that often in production code, there is a layer of abstraction that sits between the presentation layer and the business logic layer. Is this true? If so, why would you want to do this? To me it seems redundant. For example, to access methods from your business logic layer, you would have to go through a middle layer when you just could have accessed them directly. In either scenario, the business logic layer doesn't need to know anything about my GUI.
So it's either GUI -> middle -> business logic OR
GUI -> business logic
To give a real example, my assignment is to develop a game similar in concept to D&D. I have my business logic classes which i instantiate in my GUI, and use as necessary. They return information I need to update the GUI. My teacher said it would be better to have my GUI classes, and a 'Game' class which sits between my GUI and business logic classes.
Thanks in advance.