...
- Decouple module interface impl from Module abstract class where needed
- Push param validation responsibility down to each impl (not in Module)
- Use constructor injection if possible. For those with circular dependencies that can't be refactored easily, provide setters.
- Where existing modules look at configuration of other modules, get the configuration value from a getter in the interface, not the configuration.
- Where existing modules look at global fcfg values, make those available via bean-style class, GlobalConfig.
- Where existing modules look at datastore fcfg values, inject the connectionpool or config values directly.
...
Original Module Class
...
Refactoring Needed
...
org.fcrepo.server.access.DefaultAccess
...
Add DefaultAccessModule: Construct and delegate calls to DefaultAccess
Modify DefaultAccess: Do not extend Module; use constructor injection
Modify fedora-base.fcfg: Points to DefaultAccessModule instead
...
..
...
Tasklist |
---|
Phase II - Swap
- Decide on DI framework
- Convert fcfg to DI configuration and update installer to populate it instead
- Trigger initialization of module singletons via DI framework in context initialization
- Use injected module dependencies wherever possible, avoiding use of Module and Server at runtime
...