refactoring product model