Coding Standards
This page describes standard coding practices, and is intended to be an aid for developers as they write code. Code reviews will be conducted to ensure we are following our standards.
Web/Controllers
- In a Spring MVC web application, controller classes should not extend any Spring framework classes.
- Controller classes should be identified to Spring as a controller bean by using the @Controller annotation.
- Request URLs should be mapped to controller classes and methods by using the @RequestMapping annotation.
- Generally speaking, we aim to configure controllers by using annotations.
- We should use the @Autowired annotation for injected dependencies.
- As controllers are typically configured as singletons in the Spring context, the classes should be thread-safe. In practical terms, this means fields, or instance variables, should never maintain any state, and they should not be instantiated by the new operator. The only instance variables in a controller should be other Spring beans, injected by the Spring container. Typically these will be service classes or helper classes.
- Controllers should not contain any business logic - they should be concerned with UI-related logic. Business logic should be delegated to service classes.
Service Classes
- Service classes should be identified to Spring as a service bean by using the @Service annotation.
- Generally speaking, we aim to configure service classes by using annotations.
- We should use the @Autowired annotation for injected dependencies.
- As service classes are typically configured as singletons in the Spring context, the classes should be thread-safe. In practical terms, this means fields, or instance variables, should never maintain any state, and they should not be instantiated by the new operator. The only instance variables in a controller should be other Spring beans, injected by the Spring container. Typically these will be DAO classes or helper classes or other service classes.
- Service classes should contain only business logic - they should NOT be concerned with the user interface. Neither should they be concerned directly with data retrieval. Data retrieval should be delegated to DAO or other service classes.
DAO Classes
- DAOs do not extend Spring’s HibernateDAOSupport class.
- DAOs should not extend any other class.
- DAOs should include a private instance variable DaoFoundation, injected by Spring via the @Autowired annotation. The DaoFoundation class provides most of the methods necessary to communicate with the Hibernate session. For Hibernate operations not directly supported by DaoFoundation, the Hibernate Session and SessionFactory objects are available via the DaoFoundation.
- DAOs should not use Spring’s HibernateTemplate.