Context
LogTablePane.razor.cs is 812 LOC with 6 responsibility groups identified during the architecture alignment audit:
- Column management — reorder, resize, width calculation, ordering, header menus
- Keyboard/focus/scroll — key handlers, focus tracking, scroll coordination
- Selection state — dispatch, sort coordination, multi-select
- Context menu / event-field menus — menu builders, action handlers
- CSS/highlight/level styling — conditional classes, highlight application
- Filter integration — filter-from-selection, filter dispatch
Problem
Blazor ComponentBase code-behinds are inherently hard to split:
- Lifecycle methods (
OnAfterRenderAsync, OnParametersSet) coordinate across all groups
StateHasChanged calls are scattered throughout
- Partial classes fragment lifecycle without reducing coupling
- Component parameters create cascading dependencies between groups
Goals
- Testability: Expand component testing coverage. Individual concerns (column logic, keyboard handling, menu building) should be independently testable.
- Less duplicate code: Identify patterns across components that could be extracted into shared services or base behaviors.
- Better ComponentBase patterns: Evaluate industry approaches for large Blazor components:
- Extract helper services injected via DI (column manager, keyboard handler, menu builder)
- Composition via child components with parameter cascading
- Render fragments + partial template splitting
- bUnit testing strategies for extracted services vs full component tests
Panel findings
- 2/3 reviewers recommended deferring the split (Blazor pitfalls, not actively modified)
- 1/3 included it in remediation sequence
- All agreed it passes the responsibility-group test but Blazor-specific constraints make the split harder than a regular service
Acceptance criteria
Context
LogTablePane.razor.csis 812 LOC with 6 responsibility groups identified during the architecture alignment audit:Problem
Blazor
ComponentBasecode-behinds are inherently hard to split:OnAfterRenderAsync,OnParametersSet) coordinate across all groupsStateHasChangedcalls are scattered throughoutGoals
Panel findings
Acceptance criteria