Refactor ProjectType API to decouple ProjectFactory from UI