refactor to support open-close principle for factory
rename assembly names to represent SRP at the package level