Deployment of Domain Driven Design at a Major Railroad
As one of America’s leading transportation companies, the client is a large railroad network that covers 23 states across the western two-thirds of the United States. Serving over 10,000 customers per year, the client connects major western ports to eastern gateways and links to the rail systems of Canada and Mexico.
Railroads continue to require innovative and agile technological solutions to gain efficiencies, improve operating ratios, and maintain an edge in a competitive transportation market. The client contracted PK, an experienced consultant in the railroad industry, to develop a robust enterprise application to handle its terminal operations. The application needed to accommodate testability at various levels to minimize downtime and ensure the efficiency of terminal operations.
PK developed a web-based enterprise application for terminal operations that could be easily integrated with other applications and provide an efficient system for terminal operations.
The client required an application that would drive productivity and allow integration with other applications at minimal or no code change required. PK developed a domain-driven, web-based application using reusable J2EE components and Spring Integration Framework to ensure compatibility with other applications. The enterprise application was divided into several domains so that each domain would be a self-contained deployment unit. All domains except the User Interface were deployed on Linux servers; the User Interface was deployed on a Web logic cluster.
Snapshots of domains can be deployed individually, without deploying the entire application, resulting in minimum or no downtime. The domain-driven design was chosen to ensure minimum downtime, accommodate testing at multiple levels, and increase productivity.
The separation of domains resulted in increased efficiency, as individual team members could focus on their particular domain. Adopting domain driven design enhanced testability at the unit and integration levels, resulting in efficient troubleshooting and increased productivity.