Refactor architecture for extensibility: configuration, protocols, and capability interfaces #1
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.