-
Notifications
You must be signed in to change notification settings - Fork 1
Refactor architecture for extensibility: configuration, protocols, and capability interfaces #1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
…lities Co-authored-by: APayerl <6882326+APayerl@users.noreply.github.com>
Co-authored-by: APayerl <6882326+APayerl@users.noreply.github.com>
Co-authored-by: APayerl <6882326+APayerl@users.noreply.github.com>
APayerl
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
do not include a Epson config. we want to be sure that it is correct before we add it (need to see specification!)
| ); | ||
|
|
||
| // Both projectors can be controlled through the same interfaces | ||
| if (benq instanceof PowerControl) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
generally in these situations use the java syntax to auto create a variable as well. "if (benq instanceof PowerControl pc) {" to get shorter syntax
| Projector projector = ProjectorFactory.createProjector(ProjectorType.BENQ_W1070); | ||
|
|
||
| // Check if this projector supports power control | ||
| if (projector instanceof PowerControl) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
same here with "projector instanceof PowerControl pc)
The project lacked extensibility—adding new projector models required hardcoded changes, duplicated serial handling, and tight coupling to BenQ-specific commands.
Changes
Configuration System
ProjectorConfigwith builder pattern decouples connection parameters from implementationcreateBenQConfig())Protocol Abstraction
CommandProtocolinterface separates command formatting from projector logicBenQProtocol(\r*pow=on#\r),EpsonProtocol(PWR ON\r)Capability Interfaces
PowerControl,SourceControl,CommandCapabilitydefine clear contractsinstanceofchecksFactory Pattern
ProjectorFactorycentralizes creation with type-safe enum selectionRefactored Core
Projectorbase class now uses dependency injection (config + protocol)W1070implements capability interfaces, maintains backward compatibilityEpsonGenericdemonstrates adding new projector typeUsage
Adding New Projector Types
Three steps:
CommandProtocol(command format)Projector, implement capability interfacesProjectorFactoryenumTime reduced from hours to minutes.
Documentation
ARCHITECTURE.md: Design patterns, component relationshipsEXTENSIBILITY_EXAMPLES.md: Adding Sony, network-based projectors, custom capabilitiesARCHITECTURE_DIAGRAM.md: Visual class structure and data flowsOriginal prompt
💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.