Provide lifecycle management to clients by providing separate interface layer and specification which elements can be instantiated by other layers.
Don't use a feature of later JDK
Declare functionality required by application layer
Declare functionality required by application layer
Remove functionality currently not used
Application can instantiate the service itself
Directly access an account for its transactions
Parameter no longer required
Parameter no longer required
Used by application layer
Just one budget associated with ledger
Account knows which transactions are planned for it
Forecast is no longer a visible service as it depended on just a single entity.
User sees difference between planning types already
Refactoring finished: lifecycle management as described by Erik Evans