What problem does it solve? When adding business logic to OrangeHRM, developers must decide where code belongs — service, DAO, entity Decorator, or validator — and follow the framework's DI and trait conventions. This Skill provides the reference for structuring, registering, and composing service classes correctly. ## Core Features & Use Cases - Service Structure Reference: Documents the plain-class service shape with lazy-getter DAO access, paired test-injection setters, and trait-based cross-cutting concerns like EventDispatcherTrait and ConfigServiceTrait. - DI Registration Guide: Explains registering services in PluginConfigurationInterface::initialize(), adding Services::* constants, and creating matching *ServiceTrait accessors. - Placement Decision Rules: Clarifies what belongs in a service versus a DAO, entity Decorator, or validation rule, with recipes for new services, service composition, and transaction wrapping. - Use Case: When adding a new WidgetService that must persist an entity, dispatch an event, and call another plugin's UserService, follow the recipes to create the class, trait, service ID constant, and container registration. ## Quick Start Ask the AI to create a new OrangeHRM service class with its matching ServiceTrait and container registration for a given plugin resource.