Detailed Design

Class Diagrams

Class diagrams for primary packages (note: these are fairly large PNG files):

User Interface Designs

We created mockups of some of the key student and admin screens using straight HTML, without JSP or any other server technology. This allowed us to rapidly develop the mockups while also making it much easier to transition from mockups to fully working screens.

Design Patterns

The primary design pattern is Model-View-Controller, which is often used in Web-based applications (though certainly not exclusively). The layout of the database provides the basis for the Model. The model is manipulated by Controllers and displayed by Views. Views are pieces of code that almost exclusively handle presentation and should contain as little logic as possible. Controllers tie the two together and are supposed to encapsulate all business logic.

To help achieve the MVC goals, we used Spring MVC. The framework helps by providing the "glue" between the three components, allowing the creation of classes that can interact without being tightly coupled. Spring uses a design pattern that its authors refer to as "dependency injection," where the framework uses XML configuration files to decide at runtime how to link together various classes and create objects in an efficient manner.

We maintained good MVC separation, though there is certainly room for improvement and refactoring. In designing the interface and user experience, we wanted to minimize the number of "screens" that a user saw, which meant mixing partial and full requests to the server. While Spring can handle these AJAX calls, it clearly wasn't designed for them, and adding the support blurred the pattern somewhat. Also, the DAO (data access) layer could be better delineated, though it proves difficult because so many operations rely on the relationships between seemingly distinct parts of the model.