Architecture: How to implement DRY pattern for embeddable tool components?

Documentation for Sessions

🏗️ Architecture: How to implement DRY pattern for embeddable tool components?

📋 Decision Context

Question:

How to implement DRY pattern for embeddable tool components?

Task: Fix tool switching in Unified Builder - embeddables not implementing EmbeddableTool interface


🎯 Decision Made

Chosen:

Create BaseEmbeddableComponent abstract class with shared logic

Options Considered:

  1. Copy-paste EmbeddableTool interface implementation to each component
  2. Create BaseEmbeddableComponent abstract class with shared logic
  3. Use composition with a wrapper service

💭 Reasoning

Following the project's existing patterns (BaseWidgetService, FlashPersistenceRouteComponent), created an abstract base class that: (1) Implements EmbeddableTool interface with default behaviors, (2) Handles cross-tool sync subscription/cleanup automatically, (3) Provides abstract methods for tool-specific logic (selectItemsInternal, getSelectedItemIdsInternal, clearSelectionInternal), (4) Provides virtual methods for optional overrides (focusOnItemInternal, fitToViewInternal, getViewStateInternal, etc.). This reduced ~100 lines of boilerplate per embeddable to ~30 lines of tool-specific code.


📁 Files Involved


🔗 Related


Auto-generated by MCP Smart Consolidation