Skip to content

Separate transformer orchestration from export callback handling #348

Description

@DanRod1999

Is your feature request related to a problem? Please describe.
IModelTransformer currently acts as both the top-level transformation coordinator and the concrete IModelExportHandler. As a result, exporter callback methods are mixed into the public transformer interface, and control flows in both directions between IModelTransformer and IModelExporter, including access to exporter implementation details. Consumers cannot easily distinguish orchestration APIs from callback plumbing.

Describe the solution you'd like
Separate the responsibilities of coordinating a transformation, traversing the source, handling exported entities, transforming their data, and importing into the target.

The resulting design should:

  • Keep consumer-facing orchestration and intentional customization APIs distinct from IModelExportHandler callbacks.
  • Prevent IModelExporter from depending on or calling a concrete IModelTransformer.
  • Prevent transformation code from accessing private exporter methods.
  • Give the export handler or a dedicated transformation processor ownership of callback behavior rather than merely forwarding every callback to the coordinator.
  • Preserve supported exporter injection and provide a clear migration path for transformer subclasses.

Describe alternatives you've considered
A thin forwarding adapter can remove the inheritance relationship while delegating every callback back to IModelTransformer. This improves type separation, but retains the mirrored public callback API and most of the behavioral coupling, so it does not fully address the underlying concerns.

Additional context
Parent issue: #325

Draft PR #345 explores the forwarding-adapter approach and can be used to evaluate compatibility requirements, but the intended component boundaries should be agreed upon before finalizing the breaking API change.

generated with GPT-5.6 Sol

Metadata

Metadata

Assignees

Labels

apiPublic API design and compatibilityrefactorCode restructuring without intended behavior changes

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions