# 1. Goal The class {{P}}CAKE_PRICER calculates the price of a custom cake order. The code is old and hard to maintain. Refactor the class. The behavior must stay the same. A shop program calls the class before it shows the price to the customer. # 2. Open questions None. # 3. Context - The class {{P}}CAKE_PRICER exists in package $TMP. It is active. - The class is public and final. It has a public constructor without parameters. - The class has one public method, CALCULATE_PRICE, and three public types. - The current implementation is one long method. It has deep nesting, magic numbers, dead code and an unused variable. The results of the method are correct. # 4. Contract - Keep the class {{P}}CAKE_PRICER in package $TMP. Keep the name. - Keep the public interface. Do not change it: - TYPES ty_price TYPE p LENGTH 8 DECIMALS 2. - TYPES ty_filling TYPE c LENGTH 1. - TYPES ty_decoration TYPE c LENGTH 1. - METHOD calculate_price IMPORTING iv_size TYPE i iv_layers TYPE i iv_filling TYPE ty_filling iv_decoration TYPE ty_decoration iv_express TYPE abap_bool RETURNING VALUE(rv_price) TYPE ty_price. - Do not add other public methods or public attributes. # 5. Business rules - The behavior of the class stays the same. - Read the current implementation in {{P}}CAKE_PRICER. Keep every result. - Do not change the meaning of an input value or of the returned price. # 6. Constraints - Release target: 8.16. - Refactor the class in place. Do not create a new class. - Coding standards: Clean ABAP. Methods below 40 statements. No deep nesting. No unused variable. No magic number in the code. No comment that restates the code. - Out of scope: do not change the public interface of {{P}}CAKE_PRICER. # 7. Acceptance - The class {{P}}CAKE_PRICER is active and has no syntax error. - The hidden tests pass. - Write your own ABAP Unit tests for the class.