52 lines
2.3 KiB
Markdown
52 lines
2.3 KiB
Markdown
# 1. Goal
|
|
A waste container hire company rents skips to its customers. The depot terminal
|
|
calls the class {{P}}SKIP_HIRE_CALC for each hire order. The class is legacy
|
|
code. Refactor the class. The behavior must stay the same.
|
|
|
|
# 2. Open questions
|
|
None.
|
|
|
|
# 3. Context
|
|
- The class {{P}}SKIP_HIRE_CALC exists in package $TMP. It is active.
|
|
- The class is public and final. It has a public constructor without parameters.
|
|
- The legacy implementation is hard to read. It has a long method, deep nesting,
|
|
duplicated logic, and unnamed numbers.
|
|
- The depot terminal calls the class. The result of a call must not change.
|
|
|
|
# 4. Contract
|
|
- Refactor the class {{P}}SKIP_HIRE_CALC in package $TMP. The name of the class
|
|
stays the same. The class stays public and final and keeps a public
|
|
constructor without parameters.
|
|
- Keep the public interface. Do not change a name and do not change a type:
|
|
- TYPES ty_size TYPE c LENGTH 6.
|
|
- TYPES ty_amount TYPE p LENGTH 8 DECIMALS 2.
|
|
- TYPES BEGIN OF ty_container. Components: size TYPE ty_size, days TYPE i,
|
|
hazardous TYPE abap_bool, permit TYPE abap_bool. END OF ty_container.
|
|
- TYPES tt_containers TYPE STANDARD TABLE OF ty_container WITH DEFAULT KEY.
|
|
- METHOD hire_charge IMPORTING it_containers TYPE tt_containers
|
|
RETURNING VALUE(rv_charge) TYPE ty_amount.
|
|
- METHOD container_charge IMPORTING is_container TYPE ty_container
|
|
RETURNING VALUE(rv_charge) TYPE ty_amount.
|
|
- METHOD bulk_discount IMPORTING iv_count TYPE i
|
|
RETURNING VALUE(rv_percent) TYPE i.
|
|
- Do not add other public methods.
|
|
|
|
# 5. Business rules
|
|
- The behavior of the class must stay the same for every input.
|
|
- The legacy implementation in the seed defines the behavior. Read the legacy
|
|
code. The legacy code contains all the rules of the calculation.
|
|
- Do not change the result of a call.
|
|
|
|
# 6. Constraints
|
|
- Release target: SAP_BASIS 816 (ABAP Platform 2025).
|
|
- Coding standards: Clean ABAP. Methods below 40 statements. No deep nesting.
|
|
No duplicated logic. Replace each unnamed number with a named constant. Use
|
|
modern ABAP syntax. No global variable. No comment that restates the code.
|
|
- Out of scope: do not create new objects. Do not change other objects.
|
|
|
|
# 7. Acceptance
|
|
- The class {{P}}SKIP_HIRE_CALC is active and has no syntax error.
|
|
- The behavior of the class is unchanged.
|
|
- The hidden tests pass.
|
|
- Write your own ABAP Unit tests for the class.
|