Skip to content

Refactor long methods to improve readability and maintainability#26

Open
nstubbe wants to merge 1 commit intomainfrom
c-sharp-demo
Open

Refactor long methods to improve readability and maintainability#26
nstubbe wants to merge 1 commit intomainfrom
c-sharp-demo

Conversation

@nstubbe
Copy link
Copy Markdown
Member

@nstubbe nstubbe commented Dec 8, 2025

Summary

This PR addresses issue #2 by refactoring long methods into smaller, more focused methods that improve readability and maintainability.

Changes Made

1. Refactored Teller.ChecksOutArticlesFrom

  • Before: Single method handling both product addition and discount application
  • After: Extracted into three focused methods:
    • ChecksOutArticlesFrom() - orchestrates the checkout flow
    • AddProductsToReceipt() - handles adding products to receipt
    • ApplyOffersToReceipt() - handles applying discounts

2. Improved ShoppingCart.HandleOffers

  • Extracted CalculateDiscountForProduct() to separate discount calculation logic from iteration
  • Clearer separation of concerns between iterating products and calculating discounts

3. Enhanced Discount Calculation Methods

  • Introduced named constants for required quantities (e.g., const int requiredQuantity = 3)
  • Extracted common calculation into CalculateOriginalPrice() helper method
  • Improved variable naming:
    • numberOfTrios/Pairs/Fives instead of inline calculations
    • remainingItems instead of modulo operations in expressions
    • originalPrice and discountedPrice for clarity
    • discountAmount calculated as a separate step
  • Broke down complex one-liner calculations into step-by-step operations

4. Test Fixes

  • Fixed test expectation for percentage discount formatting ("10%" instead of "10.0%")

Benefits

Improved Readability - Each method now has a single, clear responsibility
Better Maintainability - Easier to understand and modify individual pieces
Reduced Complexity - Long calculations broken into named steps
All Tests Passing - Functionality preserved through refactoring

Testing

All existing tests pass:

  • 9 tests in ShoppingCartTests
  • All discount calculation scenarios verified
  • No regressions introduced

Resolves #2

- Extracted Teller.ChecksOutArticlesFrom into smaller, focused methods:
  - AddProductsToReceipt: handles adding products to receipt
  - ApplyOffersToReceipt: handles applying discounts

- Improved ShoppingCart.HandleOffers by extracting CalculateDiscountForProduct
  to separate discount calculation logic from iteration

- Enhanced discount calculation methods with:
  - Named constants for required quantities
  - Extracted CalculateOriginalPrice helper method
  - Better variable names (originalPrice, discountedPrice, remainingItems)
  - Clearer step-by-step calculations

- Fixed test expectation for percentage discount formatting

Resolves #2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Refactor long function(s) into smaller methods

1 participant