Probleem
src/Resources/BuildoraResource.php combineert te veel verantwoordelijkheden:
- Field-definitie (
defineFields)
- Action-definitie (
defineRowActions, defineBulkActions)
- Widget-definitie (
defineWidgets)
- Panel-definitie (
definePanels)
- Query bouw (
query())
- Navigation config (
showInNavigation, etc.)
- Search config (
searchResultConfig)
- Permission resolution
- URL generation
- Model binding
Met 25+ public methods en ~355 regels is dit een textbook god object. SRP-violation: elke wijziging in één concern raakt de base class waar alle consumers van overerven.
Voorstel
Splits in collaborator objects die BuildoraResource delegeert:
SearchConfig — searchResultConfig + columns
NavigationConfig — show/hide, label, icon, group
PermissionResolver — naming + ability mapping
UrlGenerator — route names + paths
ResourceQueryBuilder — query/scope hooks
BuildoraResource blijft de orchestrator die alleen field/action/panel-definities uitlevert.
Strategie
- Maak collaborators als value objects die in een trait of getter beschikbaar zijn
- Behoud backwards compatibility: oude method-namen blijven werken, delegeren naar de nieuwe objecten
- Marker oude methods als
@deprecated met migratiepad
Acceptatiecriteria
Probleem
src/Resources/BuildoraResource.phpcombineert te veel verantwoordelijkheden:defineFields)defineRowActions,defineBulkActions)defineWidgets)definePanels)query())showInNavigation, etc.)searchResultConfig)Met 25+ public methods en ~355 regels is dit een textbook god object. SRP-violation: elke wijziging in één concern raakt de base class waar alle consumers van overerven.
Voorstel
Splits in collaborator objects die
BuildoraResourcedelegeert:SearchConfig—searchResultConfig+ columnsNavigationConfig— show/hide, label, icon, groupPermissionResolver— naming + ability mappingUrlGenerator— route names + pathsResourceQueryBuilder— query/scope hooksBuildoraResourceblijft de orchestrator die alleen field/action/panel-definities uitlevert.Strategie
@deprecatedmet migratiepadAcceptatiecriteria
BuildoraResource< 150 regels, < 15 public methods