It's a method that belongs to a class rather than to an object, can be called without instance of a class.
SettingsKeyInfoProvider.GetValue(key);
A static method is a sweet, convenient little lie.
Abstraction in OOP is the process of hiding internal implementation details of a class from the outside world.
World -> Abstraction layer -> Concrete details
e.g.
Me wanting some data from the database -> Lovely ORM API -> Insides of the ORM optimizing scary SQL queries :O
Good level of abstraction makes us see better the borders of responsibilities, which leads to separation of concerns.
Separation of concerns is a design principle, which tells us that we should design systems with the minimal area of overlay between it's partitions.
| | | |--|--|--| Displaying data to users | Connecting to external systems | Connecting to the database
- You are not overwhelmed with implementation details
- You can easily find and fix bugs
- Reusable components -> You save time and money
- It's convenient
- You can finaly test stuff
Most importantly -> You can think about logic, not about the implementation!
- Tight coupling
- Taking shortcuts
- Technological debt
- Lack of bigger picture
- Lack of assertiveness
- Not caring about the quality