google / google/google-java-format
Design Smell Refactoring in JavacTokens
- Ngôn ngữ chính
- Java
- Star
- 6.2k
- Fork
- 937
- Merge trung bình
- 6 phút
- Pull request đã merge (30 ngày)
- 3
Mô tả
## Overview
Several design smells were identified in the JavacTokens class of google-java-format project. The goal focused on improving code organization, maintainability, and encapsulation while preserving all functionality.
## Location
- **Package:** com.google.googlejavaformat.java
- **Class:** JavacTokens
- **File:** JavacTokens.java
## Design Smells Identified
### 1. Position Management Issues
#### Smells:
- Unnecessary Abstraction
- Multifaceted Abstraction
#### Symptoms:
- Position fields (pos, endPos) scattered across classes
- Position-related logic mixed with other concerns
- Duplicate position handling in RawTok and CommentWithTextAndPosition
### 2. Position Validation Logic Issues
#### Smells:
- Multifaceted Abstraction
- Feature Envy
#### Symptoms:
- Position validation separated from position data
- Validation logic duplicated or inconsistent
- High coupling between classes for position validation
### 3. Field Organization Issues
#### Smells:
- Leaky Encapsulation
- Duplicate Abstraction
#### Symptoms:
- Position fields not properly encapsulated
- Same fields appearing in multiple classes
- Inconsistent position field management
## Possible Refactoring Solutions
### 1. Extract Class
- Created new TokenPosition class to handle position management
- Centralized all position-related functionality
- Improved code organization and maintainability
- Clear separation of responsibilities
### 2. Move Method
- Moved position validation logic to TokenPosition class
- Placed validation near the data it validates
- Improved cohesion and reduced coupling
- Ensured consistent validation across usage
### 3. Move Field
- Consolidated position fields into TokenPosition class
- Eliminated field duplication across classes
- Enforced consistent position handling
- Enhanced encapsulation of position data
## Implementation Impact
### Code Quality Improvements
1. **Organization**
- Clear separation of concerns
- Logical grouping of related functionality
- Reduced duplication
2. **Maintainability**
- Centralized position management
- Single point for position-related changes
- Better error handling
3. **Reliability**
- Consistent position validation
- Reduced chance of position-related bugs
- Better type safety
### Verification
- ✅ All existing tests pass
- ✅ No public API changes
- ✅ Original functionality preserved
- ✅ Backward compatible
- ✅ Follows project coding standards
## Conclusion
The implemented refactorings address the identified design smells while maintaining functionality and compatibility. The code is now more maintainable, better organized, and less prone to position-related errors.
## Labels
- design-smells
- refactoring
- code-quality
- java
- google-java-format
Hướng dẫn đóng góp
Đánh giá
Issue này chưa được đánh giá.