add configurable interface to abstract visitor and create visitor contract interfaces