Modularization
Introduction
Purpose
This documentation is designed to explain the concept, setup, and usage of modularization in ADITO projects. It provides a structured, step-by-step walkthrough suitable both for first-time readers and for later reference when working with specific topics.
Reading the entire guide at least once in sequence is highly recommended. Skipping sections may lead to missing key relationships or context, resulting in suboptimal implementation decisions.
Why Modularization Matters
In the past, all parts of the ADITO xRM platform were developed within a single monolithic Git repository. Customizing a project typically involved cloning this repository and applying changes directly. This practice led to a range of issues:
- Upgrading difficulties: Updating to newer versions of ADITO xRM was complex and error-prone due to frequent and difficult-to-resolve merge conflicts.
- Code reuse problems: Reusing functionality from one project in another was inefficient and often led to duplication or inconsistent maintenance.
- Tight coupling of functionality: Modules such as “Contact Management” were inseparably linked to others like “Activity,” even when not needed.
- Poor team separation: All teams worked in the same codebase, increasing the risk of accidental cross-team changes and decreasing maintainability.
Modularization addresses these issues by:
- Separating functional components into self-contained modules
- Enabling selective reuse and customization
- Supporting incremental upgrades and reducing merge conflicts
- Enforcing clearer team boundaries and code ownership
Definition of Terms
The following terms are used throughout this guide:
-
Module
Used in two contexts:- As a synonym for "package," which can be of type
project
ormodule
- Specifically, as a package of type
module
If ambiguity arises, the term "module" is placed in quotation marks to emphasize the specific meaning.
- As a synonym for "package," which can be of type
-
Project
Refers to:- A package of type
project
- A collection of logically related packages, such as a customer solution based on ADITO xRM
- Any package (of type
module
orproject
) that can be opened in the ADITO Designer
- A package of type
-
Package
A general term used to describe bothproject
andmodule
types managed via npm. In the context of modularization, modules are implemented as npm packages.
The terms "module" and "package" are used interchangeably in this guide, unless otherwise specified.