Skip to content

Architectuur: RowFormatter en ColumnBuilder gebruiken instanceof-chains (OCP-violation) #134

Description

@ginkelsoft-development

Probleem

RowFormatter en ColumnBuilder bevatten branching op concrete field-types:

if (\$field instanceof BooleanField) { ... }
elseif (\$field instanceof CurrencyField) { ... }
elseif (\$field instanceof BelongsToField) { ... }
// ...

Elke nieuwe field-type vereist edits in beide bestanden. Textbook OCP-violation.

Voorstel

Verplaats de presentatie-logica naar de Field-base als polymorfe methods:

abstract class Field
{
    abstract public function getDisplayValue(mixed \$rawValue, Model \$record): string;
    public function getColumnDefinition(): array { /* default */ }
}

Elk concreet field-type override deze methods met zijn eigen logica. RowFormatter en ColumnBuilder roepen de interface aan, niet instanceof.

Impact

  • Nieuwe field-types kunnen toegevoegd worden zonder RowFormatter/ColumnBuilder aan te raken
  • Test-coverage verbetert: elke field-type heeft zelf testbare display-logica
  • Refactor is intrusief — alle 23 field-types moeten een getDisplayValue krijgen

Acceptatiecriteria

  • Abstract getDisplayValue() op Field
  • Alle 23 field-types implementeren het
  • Geen instanceof <FieldType> meer in RowFormatter of ColumnBuilder (alleen instanceof Field mag)
  • Bestaande output blijft identiek (regression tests draaien groen)
  • Field contract test (uit foundation issue) dekt elke implementatie

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions