Skip to content

Evaluate EventResolverBase decomposition for architecture and performance #539

@jschick04

Description

@jschick04

ContextEventResolverBase.cs is 1103 LOC with 4-5 distinct responsibility groups identified during the architecture alignment audit against the solution-architecture playbook:

  1. Template parsingGetOrParseTemplateDataNodes, DoesTemplateMatchPropertyCount variants, WildcardWithNumberRegex
  2. Description formattingFormatDescription, ResolveDescription, BuildNoMetadataFallbackDescription, CleanupFormatting, buffer management
  3. Task/keyword resolutionResolveTaskName, TryResolveTaskNameFromDetails, CacheTaskName, GetKeywordsFromBitmask
  4. Legacy dispatchGetModernEvent, TryDisambiguateLegacyMessage, GetParametersForDescription
  5. Event model constructionCreateEventModel, ResolveEvent

Evaluation needed

  • Performance: This is hot code on the read path. Evaluate whether decomposition introduces measurable overhead (virtual dispatch, additional allocations, indirection).
  • Architecture: The class uses inheritance (EventResolverBase). Facade pattern is awkward with inheritance — evaluate alternative decomposition strategies (composition, strategy extraction, static helpers).
  • Testability: Template-matching logic (DoesTemplateMatchPropertyCount triplet) currently lacks isolated unit tests. Decomposition would unlock testing these independently.
  • Panel findings: Architecture panel was split — duck recommended splitting now (4-5 responsibility groups, hot code path), opus recommended deferring (inheritance makes facade awkward, working code).

Acceptance criteria

  • Benchmark current resolver performance as baseline
  • Evaluate decomposition approaches (composition vs inheritance vs static helpers)
  • Assess regression risk vs testability gain
  • Decision: split now, split with specific approach, or defer with documented rationale

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions