Refactoring builders to encapsulate more of their own logic