In Intino, business units are developed using the hexagonal architecture, a design pattern that emphasizes the separation of a system's core logic from external elements it interacts with, such as databases, user interfaces, or external services. This architecture, also known as the ports and adapters pattern, allows changes to these external elements without affecting the core logic.

The hexagonal architecture organizes the application into a central core, surrounded by a layer of ports and adapters. The core contains the business logic, while the ports define points of interaction with external elements through interfaces. Adapters implement these interfaces to translate between the external technologies and the business logic. Intino uses two specific DSLs to facilitate the development of business units under the hexagonal architecture:

  • Proteo: This DSL is used to define the business model. Proteo allows developers to specify the structure and relationships of data within the business domain clearly and succinctly. By providing a precise model definition, Proteo ensures that all business rules and data structures are consistently applied throughout the application.
  • Konos: Complementing Proteo, Konos is used to define the layers that interact with the model. It helps in setting up the ports and adapters that connect the business logic to external applications and services. Konos enables the efficient integration of these components, ensuring that they adhere to the predefined business model and rules.

Integration with Datahub and Publisher-Subscriber Mechanism

Integrating the hexagonal architecture with Intino’s Datahub requires the use of a publisher-subscriber model. This model is crucial for ensuring that changes within the business units are propagated efficiently across the system. Business units act as publishers, sending out notifications of changes or updates. The Datahub acts as a subscriber, receiving these notifications and updating the central data repository accordingly. This mechanism ensures that all parts of the system remain synchronized and that data integrity is maintained across different units.