Prompt
Follow the Don’t Repeat Yourself (DRY) principle when designing class hierarchies. Extract common functionality into base classes and avoid duplicating state or methods in subclasses. When extending a class, delegate to parent implementations rather than redefining functionality.
Examples of issues to avoid:
// AVOID: Duplicating state in subclass
public class TransformAuto extends Transform {
@Nullable
private CameraPosition cameraPosition; // Duplicate of parent state
@UiThread
public CameraPosition getCameraPosition() {
if (cameraPosition == null) {
cameraPosition = invalidateCameraPosition();
}
return cameraPosition;
}
}
// BETTER: Delegate to parent
public class TransformAuto extends Transform {
// No duplicate cameraPosition variable
@UiThread
public CameraPosition getCameraPosition() {
return super.getCameraPosition(); // Delegate to parent
}
}
For similar implementations across different technologies (e.g., GL and Vulkan renderers), extract shared code into common base classes. This improves maintainability and prevents bugs from inconsistent implementations.