= Architecture =
The architecture is something to consider on a rather abstract level, in the beginning of a project, but also on the level of a single task.
In the context of a whole project, architecture means defining whether there are multiple {{UBIK}} installations on different sites, what products will be involved and how they are connected topologically and semantically. On task level, the same is interesting, just in greater detail. === Topology ===In this context, topology addresses the technical architecture. Questions:
* What top-level modules do exist where?
** in the network
** using which protocol
** covering what data
=== Semantics ===
Semantics in this context addresses the functional architecture: which task-level modules are taking care of what responsibility, and how they play together. Questions:
* What is the purpose of a module?
* What information is exchanged via an interface?
On task level, the same is interesting, just in greater detail.=== Restrictions ===
We recommend the architecture to satisfy the following restrictions.
==== Top-Level architecture ====
* Network-distances between the database server and the application server (e.g., web services) should be minimal for performance reasons.
* One should always plan for a staging strategy with multiple environments for QA.
==== Task-level architecture ====
* Custom code should always be developed in a plugin where possible, with the {{UBIK}} custom code just connecting the plugin code with the {{UBIK}} objects.
* Custom code should be arranged so heavy-duty processes (involving much data and complex calculations) are performed on powerful machines (and not on the mobile client).