For a good code design it's very important to use proper abstractions because they make our code loosely coupled . That means that different componenets of our code can be replaced with alternative implementations without affecting other components. When our code is loosely coupled it becomes easier to test, easier to extend, easier to reuse,... See more