mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-04 09:11:39 +00:00
103 lines
4.3 KiB
Markdown
103 lines
4.3 KiB
Markdown
# Project Analysis: GildedRose Refactoring Kata
|
|
|
|
## 1. COMPLEXITY ANALYSIS
|
|
|
|
### a. Functions with High Cyclomatic Complexity
|
|
- After refactoring, there are no functions with high cyclomatic complexity. The most complex logic (previously in `GildedRose.updateQuality`) has been delegated to item-specific classes, each with simple, linear logic.
|
|
- The only notable switch is in `GildedRose.wrapItem`, which is straightforward.
|
|
|
|
### b. Long Parameter Lists
|
|
- No methods have long parameter lists. All constructors and methods use 0-3 parameters, which is manageable.
|
|
|
|
### c. Deep Nesting Levels
|
|
- No deep nesting. The deepest is a single switch or if-else in item update methods.
|
|
|
|
---
|
|
|
|
## 2. CODE QUALITY ISSUES
|
|
|
|
### a. Potential Bugs
|
|
- **String Matching for Item Types:**
|
|
- `wrapItem` relies on exact string matches. Typos or whitespace issues could cause items to be misclassified as `NormalItem`.
|
|
- **Null Handling:**
|
|
- No null checks for the `items` array or for individual `Item` objects in the constructor.
|
|
- **Conjured Items:**
|
|
- The comment in `TexttestFixture` notes that "Conjured" items are not handled properly.
|
|
|
|
### b. Performance Problems
|
|
- No significant performance issues. All loops are O(n) over the items array, which is expected and efficient for this domain.
|
|
|
|
### c. Security Concerns
|
|
- No user input, file, or network operations in the main logic. No security concerns.
|
|
|
|
### d. Maintainability Issues
|
|
- **Stringly-Typed Item Identification:**
|
|
- Hardcoded item names in `wrapItem` make it error-prone and less extensible.
|
|
- **Adding New Item Types:**
|
|
- Requires modifying `wrapItem`, violating the Open/Closed Principle.
|
|
- **No Validation:**
|
|
- No validation for item quality or sellIn values.
|
|
- **Test Coverage for New Item Types:**
|
|
- "Conjured" items are not implemented, but are present in tests.
|
|
|
|
---
|
|
|
|
## 3. IMPROVEMENT ROADMAP
|
|
|
|
### Quick Wins (< 1 hour)
|
|
1. **Add Null and Trim Checks**
|
|
- Validate that the `items` array and each `Item` are not null in the constructor.
|
|
- Trim whitespace from item names in `wrapItem`.
|
|
- Example:
|
|
```java
|
|
if (items == null) throw new IllegalArgumentException("Items array cannot be null");
|
|
if (item == null) throw new IllegalArgumentException("Item cannot be null");
|
|
String name = item.name.trim();
|
|
```
|
|
|
|
2. **Add Comments and Documentation**
|
|
- Briefly document the purpose of each class and method, especially the item subclasses.
|
|
|
|
### Medium Effort (1-4 hours)
|
|
1. **Use Enum for Item Types**
|
|
- Define an `enum` for item types and map names to enum values.
|
|
- Example:
|
|
```java
|
|
enum ItemType { AGED_BRIE, BACKSTAGE_PASS, SULFURAS, NORMAL, CONJURED }
|
|
```
|
|
|
|
2. **Factory Pattern for Item Creation**
|
|
- Move item creation logic to a factory class, making `GildedRose` cleaner and more extensible.
|
|
|
|
3. **Implement Conjured Items**
|
|
- Add a `ConjuredItem` class and handle it in the factory.
|
|
|
|
4. **Validation Logic**
|
|
- Add validation for item quality and sellIn in the constructor or in the `Item` class.
|
|
|
|
### Major Refactoring (> 4 hours)
|
|
1. **Plugin System for New Item Types**
|
|
- Allow new item types to be registered at runtime, so adding a new type does not require modifying core classes.
|
|
|
|
2. **Dependency Injection for Item Factories**
|
|
- Allow item creation logic to be injected, making the system more flexible and testable.
|
|
|
|
3. **Comprehensive Error Handling and Logging**
|
|
- Add robust error handling and logging for invalid items or unexpected states.
|
|
|
|
4. **Advanced Test Coverage**
|
|
- Expand tests to cover edge cases, invalid data, and new item types.
|
|
|
|
---
|
|
|
|
## Summary Table
|
|
|
|
| Effort | Issue/Opportunity | Example/Description |
|
|
|----------------|----------------------------------|-----------------------------------------------------|
|
|
| Quick Win | Null checks, trim names | Add validation in constructor and wrapItem |
|
|
| Medium Effort | Enum for item types, factory | Use enum and factory for item creation |
|
|
| Medium Effort | Implement Conjured items | Add ConjuredItem class and logic |
|
|
| Major Refactor | Plugin system, DI, error handling| Allow runtime registration, inject factories, logging|
|
|
| Major Refactor | Advanced test coverage | Add tests for edge cases and new item types |
|
|
|
|
</rewritten_file> |