Software Design - Abstraction Layer
Abstraction is a technique for hiding complexity that is irrelevant to the targeted user (ie targeted business domain).
A designer should not know which electrons flow in the wire to defined its color.
The implementation of abstraction is done through the creation of higher layer that encapsulate the recurring patterns of the lowest level.
The following are the basis abstractions found in a computer and materialized in language generation
- Logic gates abstract away the details of wiki/CMOS.
- Machine language abstracts away the details of logic gates.
- Assembly language abstracts away the details of machine languages.
- Programming language abstracts away the details of assembly languages.
To build a data abstraction, you need to identify for each data structure a set of operations (module).
Custom abstractions can facilitate portability (cross-platform deployment) and performance optimization. …. Custom abstractions may additionally limit expressiveness: they must be revisited to take advantage of new library features and due to encapsulation may be unable to exploit supporting technologies.
All Abstraction are failed abstraction
- Does this abstraction make our code at least a little easier to write?
- To understand?
- To troubleshoot?
- Are we better off with this abstraction than we were without it?
The amount of time saved via guava dependency is orders of magnitude less than the amount of time lost via guava dependency mismanagement.