Skip to main content

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 or module
    • Specifically, as a package of type module

    If ambiguity arises, the term "module" is placed in quotation marks to emphasize the specific meaning.

  • 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 or project) that can be opened in the ADITO Designer
  • Package
    A general term used to describe both project and module types managed via npm. In the context of modularization, modules are implemented as npm packages.

tip

The terms "module" and "package" are used interchangeably in this guide, unless otherwise specified.