principles:single_level_of_abstraction
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
principles:single_level_of_abstraction [2014-07-01 09:44] – caveats, ... christian | principles:single_level_of_abstraction [2020-09-09 15:26] – old revision restored (2014-07-01 11:12) 116.202.228.169 | ||
---|---|---|---|
Line 43: | Line 43: | ||
===== Origin ===== | ===== Origin ===== | ||
- | Stated in | + | Stated in [[resources: |
- | {{page>resources: | + | |
===== Evidence ===== | ===== Evidence ===== | ||
Line 78: | Line 77: | ||
===== Examples ===== | ===== Examples ===== | ||
- | ==== Example1: | + | ==== Example1: |
+ | |||
+ | A typical example for the application of SLA is a loop iterating over a certain data structure: | ||
+ | |||
+ | <code java> | ||
+ | public List< | ||
+ | List< | ||
+ | for (ResultEntity entity : resultSet) { | ||
+ | ResultDto dto = new ResultDto(); | ||
+ | dto.setShoeSize(entity.getShoeSize()); | ||
+ | dto.setNumberOfEarthWorms(entity.getNumberOfEarthWorms()); | ||
+ | dto.setAge(computeAge(entity.getBirthday())); | ||
+ | result.add(dto); | ||
+ | } | ||
+ | return result; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | There are two levels of abstractions in this method. First there is the loop which acts upon the whole result set and second there is the loop body which converts a single entity to a [[patterns: | ||
+ | |||
+ | <code java> | ||
+ | public List< | ||
+ | List< | ||
+ | for (ResultEntity entity : resultSet) { | ||
+ | result.add(toDto(entity)); | ||
+ | } | ||
+ | return result; | ||
+ | } | ||
+ | |||
+ | private ResultDto toDto(ResultEntity) { | ||
+ | ResultDto dto = new ResultDto(); | ||
+ | dto.setShoeSize(entity.getShoeSize()); | ||
+ | dto.setNumberOfEarthWorms(entity.getNumberOfEarthWorms()); | ||
+ | dto.setAge(computeAge(entity.getBirthday())); | ||
+ | return dto; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Now there are two smaller methods each of which is written in terms of a single level of abstraction. This is better readable as no mental grouping is necessary. Furthermore the two methods are still separately understandable ([[Principle of Separate Understandability|PSU]]) so no mental inlining is necessary and if you don't care about the details of the '' | ||
+ | |||
+ | ==== Example2: Commented Code Blocks ==== | ||
+ | |||
+ | ==== Example3: Algorithms ==== | ||
===== Description Status ===== | ===== Description Status ===== |
principles/single_level_of_abstraction.txt · Last modified: 2021-10-18 22:03 by christian