Refactoring: extracted View interface & Controller abstract class + expanded javadoc