This is an overview of the architecture of the WebIssues system and its components.
The WebIssues system is based on a three-tier client-server architecture and consists of the following components:
The most important part of the system is the rich desktop client application. The client maintains a local cache of data and implements much of the business logic. For example operations like filtering, searching and sorting are performed entirely on the client side practically in real-time, significantly reducing the workload of the server.
Version 1.0 of the system introduces a web client tightly integrated with the server, however the desktop client remains the primary focus as something that makes WebIssues distinct from other issue tracking systems.
The server part of WebIssues, written in PHP, is designed as a thin wrapper over the database, allowing to synchronize data between the client and the server and to perform modifications in the database. It provides independence of the database engine, network transparency, security and data integrity, but it is designed specifically for the rich client and implements very little business logic on its own. The server also provides several additional services like large file storage, logging, sending email notifications, etc.
A special protocol (see WebIssues protocol for more information) is used for communication between the client and the server. It is based on plain HTTP request and response, uses no additional markup or metadata to decorate information and consists of only few commands for retrieving data (often in an incremental way). In version 1.0 it is possible to easily implement different communication protocols.
The desktop client, written in C++ using the Qt framework, uses a variant of the model-view-controller architecture. The model is responsible for storing data retrieved from the server in structures closely resembling the database schema. The views retrieve data from the model and present them to the user. The controller communicates with the server in order to perform operations and to update the data stored in the model.
The web client, introduced in version 1.0, is an integral part of the server. It is based on the Web MVC architecture (see MVC Pattern for more information). The model consists of a data access layer and an API for the database; this part is shared with the server. The controller consists of an application (front controller) and individual pages which process input and retrieve information from the model. The views are simple templates which render the HTML output with provided data.