The state of a shipment is a usualy checked by persons who ordered the delivery. When dealing with a single carrier the sender deals with a single site and becomes familiar with the way the site represents the data related to a shipment. If, however, multiple carriers are involved in the delivery process it becomes hard to find out where's the shipment and what is its status.
This project solves the problem by collecting data about shipments from various carriers and unifying it. Data is collected by parsing the HTML output by the carrier's server(s) as a response to users requests. It is kept in a MS SQL Server 2005 and is retrieved by web services accessing the data thru multiple tiers.
Data Access Tier
The business entities and data access logic reside in the Data Access Layer. It was generated by a OR Mapper&em;SimpleGen, I developped earlier.
Plenty of unit tests were written to provide both security in implementing all subsequent layers as well as a solid support for changing the code if and when necessary.
Business Logic Tier
Business classes were built on top of business entities defined in Data Access Layer. The layer provides business logic implementation as well as transaction processing for the underlying SQL server.
The layer contains all classes responsible for "grabbing" URLs and parsing them. A Provider Design Pattern was used to define concrette grabbers. A concrette grabber is configured by two configuration classes. Each carrier has its own dedicated grabber. Grabbers are implemente as plug-ins thus achieveding a high degree of code and functionality independence.
A specialized threaded scheduler is also located in the layer. It manages multiple threads executing simultaneously delivery states checks for mutliple shipments.
Shipment data is accessed and manipulated by a web service which also implements some functionality for controlling the threaded scheduler.