Using an abstraction interface that keeps type parameters local to each component (Project, Issue, PUllRequest, etc.)