Java Object-Oriented Design Guidelines
Review and improve Java code using focused object-oriented design references selected after assessing the request and affected code.
What is covered in this Skill?
- Fundamental design principles (SOLID, DRY, YAGNI)
- Class and interface design: composition over inheritance, immutability, accessibility minimization, accessor methods
- Core OOP concepts: encapsulation, inheritance, polymorphism
- Object creation patterns: static factory methods, Builder, Singleton, dependency injection, avoiding unnecessary objects
- OOD code smells: God Class, Feature Envy, Inappropriate Intimacy, Refused Bequest, Shotgun Surgery, Data Clumps
- Method design: parameter validation, defensive copies, careful signatures, empty collections over nulls, Optional usage
- Exception handling: checked vs. runtime exceptions, standard exceptions, failure-capture messages, no silent ignoring
Scope: Classify the applicable OOD concerns first, then load only the focused references needed for those concerns. Load multiple references when a refactoring crosses concern boundaries.
Constraints
Before applying any OOD changes, ensure the project compiles. If compilation fails, stop immediately — do not proceed until resolved. After applying improvements, run full verification.
- MANDATORY: Run
./mvnw compile or mvn compile before applying any change
- SAFETY: If compilation fails, stop immediately and do not proceed — compilation failure is a blocking condition
- VERIFY: Run
./mvnw clean verify or mvn clean verify after applying improvements
- PROGRESSIVE DISCLOSURE: Classify the applicable OOD concerns before reading references, then read only the references mapped to those concerns
- MULTI-CONCERN CHANGES: Read multiple focused references only when the request or diagnosed code problems cross concern boundaries
- PRESERVE BEHAVIOR: Apply focused, incremental refactorings without changing observable business behavior
- INCREMENTAL SAFETY: Compile after each significant refactoring and keep changes easy to revert if validation reveals a regression
- DEPENDENCY SAFETY: Confirm refactoring does not break imports, dependencies, class relationships, or established contracts
- ADJACENT SKILLS: Use skill 122 for dedicated type-design work and skill 126 for dedicated exception-handling work; use the overlapping skill 121 references only when those topics are part of a broader OOD review
- EDGE CASE: If request scope is ambiguous, stop and ask a clarifying question before applying changes
- EDGE CASE: If required inputs, files, or tooling are missing, report what is missing and ask whether to proceed with setup guidance
When to use this skill
- Review Java code for object-oriented design
- Refactor Java code for object-oriented design
- Improve Java code for object-oriented design
- Fix OOP concept misuse in Java code
- Identify and resolve code smells in Java code
- Improve object creation patterns in Java code
- Improve method design in Java code
- Improve exception handling in Java code
Workflow
- Compile project before OOD changes
Run ./mvnw compile or mvn compile and stop immediately if compilation fails.
- Assess code and classify OOD concerns
Analyze the request and affected Java code before reading implementation guidance. Classify each relevant problem into one or more concerns:
- Fundamental principles: SOLID, DRY, or YAGNI violations.
- Core OOP concepts: encapsulation, inheritance, or polymorphism misuse.
- Code smells: God Class, Feature Envy, Inappropriate Intimacy, Refused Bequest, Shotgun Surgery, or Data Clumps.
- Object creation: factories, builders, singletons, dependency injection, or unnecessary object creation.
- Classes and interfaces: accessibility, public fields, mutability, composition, or inheritance design.
- Enums and annotations: int constants, ordinals, bit fields, ordinal indexing, or missing
@Override.
- Methods: parameter validation, defensive copies, signatures, null collections, or
Optional.
- Exceptions: exception contracts that are part of the broader OOD review.
If the request is dedicated type-design work, use skill 122. If it is dedicated exception-handling work, use skill 126.
- Read only applicable OOD references
Map the classified concerns to focused references:
- For SOLID, DRY, or YAGNI, read
references/121-java-object-oriented-design-principles.md.
- For encapsulation, inheritance, or polymorphism, read
references/121-java-object-oriented-design-oop-concepts.md.
- For object-oriented code smells, read
references/121-java-object-oriented-design-code-smells.md.
- For factories, builders, singletons, dependency injection, or unnecessary objects, read
references/121-java-object-oriented-design-object-creation.md.
- For class and interface boundaries, accessibility, mutability, composition, or inheritance design, read
references/121-java-object-oriented-design-classes-interfaces.md.
- For enums, ordinals, bit fields, enum lookup, or
@Override, read references/121-java-object-oriented-design-enums-annotations.md.
- For method contracts, validation, defensive copies, signatures, collection returns, or
Optional, read references/121-java-object-oriented-design-methods.md.
- For exception contracts within a broader OOD review, read
references/121-java-object-oriented-design-exceptions.md.
Read every reference required by a cross-concern refactoring, but do not read unrelated references.
- Apply focused refactorings
Prioritize findings by impact: CRITICAL, MAINTAINABILITY, FLEXIBILITY, or CODE_QUALITY. Apply the smallest suitable refactoring for each diagnosed concern while preserving observable behavior:
- Extract classes or methods to restore focused responsibilities.
- Introduce or refine abstractions for extension, interface segregation, and dependency inversion.
- Correct inheritance hierarchies to preserve substitutability, or replace inheritance with composition.
- Move behavior to eliminate Feature Envy and improve encapsulation.
- Introduce cohesive value or parameter objects for Data Clumps.
- Hide exposed state and reduce unnecessary coupling.
Apply changes incrementally and compile after each significant refactoring.
- Verify with full build
Run ./mvnw clean verify or mvn clean verify after applying improvements.
- Report applied OOD improvements
Report findings by impact and concern, focused references used, refactorings applied, maintainability/flexibility/testability benefits, behavior-preservation evidence, and the final compilation and test result.
Reference
For detailed guidance, examples, and constraints, see:
- references/121-java-object-oriented-design-principles.md
- references/121-java-object-oriented-design-oop-concepts.md
- references/121-java-object-oriented-design-code-smells.md
- references/121-java-object-oriented-design-object-creation.md
- references/121-java-object-oriented-design-classes-interfaces.md
- references/121-java-object-oriented-design-enums-annotations.md
- references/121-java-object-oriented-design-methods.md
- references/121-java-object-oriented-design-exceptions.md
1---2name: 121-java-object-oriented-design-33description: Use when reviewing, improving, or refactoring Java object-oriented design, including applying SOLID, DRY, or YAGNI; improving classes and interfaces; correcting encapsulation, inheritance, or polymorphism; resolving God Class, Feature Envy, or Data Clumps; and improving object creation, methods, or exception contracts. Triggers include review Java OOD, refactor Java OOD, improve Java OOD, fix OOP misuse, and identify Java code smells. Part of cursor-rules-java project4license: Apache-2.05---6# Java Object-Oriented Design Guidelines
7
8Review and improve Java code using focused object-oriented design references selected after assessing the request and affected code.
9
10**What is covered in this Skill?**
11
12- Fundamental design principles (SOLID, DRY, YAGNI)
13- Class and interface design: composition over inheritance, immutability, accessibility minimization, accessor methods
14- Core OOP concepts: encapsulation, inheritance, polymorphism
15- Object creation patterns: static factory methods, Builder, Singleton, dependency injection, avoiding unnecessary objects
16- OOD code smells: God Class, Feature Envy, Inappropriate Intimacy, Refused Bequest, Shotgun Surgery, Data Clumps
17- Method design: parameter validation, defensive copies, careful signatures, empty collections over nulls, Optional usage
18- Exception handling: checked vs. runtime exceptions, standard exceptions, failure-capture messages, no silent ignoring
19
20**Scope:** Classify the applicable OOD concerns first, then load only the focused references needed for those concerns. Load multiple references when a refactoring crosses concern boundaries.
21
22## Constraints
23
24Before applying any OOD changes, ensure the project compiles. If compilation fails, stop immediately — do not proceed until resolved. After applying improvements, run full verification.
25
26- **MANDATORY**: Run `./mvnw compile` or `mvn compile` before applying any change
27- **SAFETY**: If compilation fails, stop immediately and do not proceed — compilation failure is a blocking condition
28- **VERIFY**: Run `./mvnw clean verify` or `mvn clean verify` after applying improvements
29- **PROGRESSIVE DISCLOSURE**: Classify the applicable OOD concerns before reading references, then read only the references mapped to those concerns
30- **MULTI-CONCERN CHANGES**: Read multiple focused references only when the request or diagnosed code problems cross concern boundaries
31- **PRESERVE BEHAVIOR**: Apply focused, incremental refactorings without changing observable business behavior
32- **INCREMENTAL SAFETY**: Compile after each significant refactoring and keep changes easy to revert if validation reveals a regression
33- **DEPENDENCY SAFETY**: Confirm refactoring does not break imports, dependencies, class relationships, or established contracts
34- **ADJACENT SKILLS**: Use skill 122 for dedicated type-design work and skill 126 for dedicated exception-handling work; use the overlapping skill 121 references only when those topics are part of a broader OOD review
35- **EDGE CASE**: If request scope is ambiguous, stop and ask a clarifying question before applying changes
36- **EDGE CASE**: If required inputs, files, or tooling are missing, report what is missing and ask whether to proceed with setup guidance
37
38## When to use this skill
39
40- Review Java code for object-oriented design
41- Refactor Java code for object-oriented design
42- Improve Java code for object-oriented design
43- Fix OOP concept misuse in Java code
44- Identify and resolve code smells in Java code
45- Improve object creation patterns in Java code
46- Improve method design in Java code
47- Improve exception handling in Java code
48
49## Workflow
50
511. **Compile project before OOD changes**
52
53Run `./mvnw compile` or `mvn compile` and stop immediately if compilation fails.
54
552. **Assess code and classify OOD concerns**
56
57
58Analyze the request and affected Java code before reading implementation guidance. Classify each relevant problem into one or more concerns:
59
60- Fundamental principles: SOLID, DRY, or YAGNI violations.
61- Core OOP concepts: encapsulation, inheritance, or polymorphism misuse.
62- Code smells: God Class, Feature Envy, Inappropriate Intimacy, Refused Bequest, Shotgun Surgery, or Data Clumps.
63- Object creation: factories, builders, singletons, dependency injection, or unnecessary object creation.
64- Classes and interfaces: accessibility, public fields, mutability, composition, or inheritance design.
65- Enums and annotations: int constants, ordinals, bit fields, ordinal indexing, or missing `@Override`.
66- Methods: parameter validation, defensive copies, signatures, null collections, or `Optional`.
67- Exceptions: exception contracts that are part of the broader OOD review.
68
69If the request is dedicated type-design work, use skill 122. If it is dedicated exception-handling work, use skill 126.
70
71
723. **Read only applicable OOD references**
73
74
75Map the classified concerns to focused references:
76
77- For SOLID, DRY, or YAGNI, read `references/121-java-object-oriented-design-principles.md`.
78- For encapsulation, inheritance, or polymorphism, read `references/121-java-object-oriented-design-oop-concepts.md`.
79- For object-oriented code smells, read `references/121-java-object-oriented-design-code-smells.md`.
80- For factories, builders, singletons, dependency injection, or unnecessary objects, read `references/121-java-object-oriented-design-object-creation.md`.
81- For class and interface boundaries, accessibility, mutability, composition, or inheritance design, read `references/121-java-object-oriented-design-classes-interfaces.md`.
82- For enums, ordinals, bit fields, enum lookup, or `@Override`, read `references/121-java-object-oriented-design-enums-annotations.md`.
83- For method contracts, validation, defensive copies, signatures, collection returns, or `Optional`, read `references/121-java-object-oriented-design-methods.md`.
84- For exception contracts within a broader OOD review, read `references/121-java-object-oriented-design-exceptions.md`.
85
86Read every reference required by a cross-concern refactoring, but do not read unrelated references.
87
88
894. **Apply focused refactorings**
90
91
92Prioritize findings by impact: CRITICAL, MAINTAINABILITY, FLEXIBILITY, or CODE_QUALITY. Apply the smallest suitable refactoring for each diagnosed concern while preserving observable behavior:
93
94- Extract classes or methods to restore focused responsibilities.
95- Introduce or refine abstractions for extension, interface segregation, and dependency inversion.
96- Correct inheritance hierarchies to preserve substitutability, or replace inheritance with composition.
97- Move behavior to eliminate Feature Envy and improve encapsulation.
98- Introduce cohesive value or parameter objects for Data Clumps.
99- Hide exposed state and reduce unnecessary coupling.
100
101Apply changes incrementally and compile after each significant refactoring.
102
103
1045. **Verify with full build**
105
106Run `./mvnw clean verify` or `mvn clean verify` after applying improvements.
107
1086. **Report applied OOD improvements**
109
110Report findings by impact and concern, focused references used, refactorings applied, maintainability/flexibility/testability benefits, behavior-preservation evidence, and the final compilation and test result.
111
112## Reference
113
114For detailed guidance, examples, and constraints, see:
115
116- [references/121-java-object-oriented-design-principles.md](references/121-java-object-oriented-design-principles.md)
117- [references/121-java-object-oriented-design-oop-concepts.md](references/121-java-object-oriented-design-oop-concepts.md)
118- [references/121-java-object-oriented-design-code-smells.md](references/121-java-object-oriented-design-code-smells.md)
119- [references/121-java-object-oriented-design-object-creation.md](references/121-java-object-oriented-design-object-creation.md)
120- [references/121-java-object-oriented-design-classes-interfaces.md](references/121-java-object-oriented-design-classes-interfaces.md)
121- [references/121-java-object-oriented-design-enums-annotations.md](references/121-java-object-oriented-design-enums-annotations.md)
122- [references/121-java-object-oriented-design-methods.md](references/121-java-object-oriented-design-methods.md)
123- [references/121-java-object-oriented-design-exceptions.md](references/121-java-object-oriented-design-exceptions.md)