Why does EK9 reject classes with too many service and data fields?
← Code Quality · Ref: Q861
A class with 3+ service fields AND 3+ data fields is a 'God Class'. Split into a data class (few services) and a service component.
THRESHOLD: >= 3 service fields AND >= 3 data fields.
THIS EXAMPLE
OrderHandler has 2 service fields + 3 data fields = OK (under threshold).
See Q856 for class vs component. See Q311 for quality checks.
Example
defines module qa.quality.avoid.god.class defines trait ValidatorService validate() abstract PricingService calculatePrice() abstract ShippingService ship() abstract defines class ValidatorImpl with trait of ValidatorService override validate() require true PricerImpl with trait of PricingService override calculatePrice() require true ShipperImpl with trait of ShippingService override ship() require true defines class OrderHandler //2 service fields (under threshold) validator ValidatorService: ValidatorImpl() pricer PricingService: PricerImpl() //3 data fields orderId <- "ORD-001" customerName <- "Steve" totalAmount <- 0 processOrder() validator.validate() pricer.calculatePrice() default operator ? defines program GodClassDemo() stdout <- Stdout() handler <- OrderHandler() if handler? handler.processOrder() stdout.println("Order processed")
Common mistakes
E11025 — 3+ service fields AND 3+ data fields triggers E11025. Split into a data class and a service component. See ek9 -h E11025 for details.
Incorrect:
//3 service fields (triggers threshold) validator ValidatorService: ValidatorImpl() pricer PricingService: PricerImpl() shipper ShippingService: ShipperImpl()
Correct:
//2 service fields (under threshold) validator ValidatorService: ValidatorImpl() pricer PricingService: PricerImpl()
Other ways to ask this
- What triggers E11025 EXCESSIVE_MIXED_RESPONSIBILITIES?
- What is the God Class anti-pattern in EK9?
- How many service fields can a class have alongside data fields?
Coming from another language?
Java: detected only by SonarQube. Python: no detection. Go: convention only. EK9: compile-time error preventing God Class.
Keywords: service, quality, E11025, god, responsibilities, mixed, field, class