MoDisco aims at providing a platform supporting various legacy modernization use-cases for various kinds of existing technologies.

To facilitate reuse of components between several use-cases, MoDisco is organized in three layers:

- the Use-Cases layer containing components providing a solution for a specific modernization use-case.
- the Technology layer containing components dedicated to one legacy technology but independent from the modernization use case.
- the Infrastructure layer containing generic components independent from any legacy technology.

## Use-cases layer

This layer contains components supporting legacy modernization use-cases. The kind of use-cases MoDisco could support is quite infinite. Nevertheless, the main ones are well identified:

- Comparison : comparing two versions of the same application at a structural level
- Quality Analysis: detection of anti-patterns in existing code and computation of metrics.
- Cartography: detection of the main components of a system and their dependencies.
- Understanding: extraction of features presented independently from the implementation (structure, behaviour, persistence, data-flow …).
- Reverse-Modeling: creation of models out of existing systems to populate modeling tools (supporting UML or Domain-Specific Languages).
- Refactoring: improvement of the source code to integrate better coding norms or design patterns.
- Migration: transformation of the source code to change the framework, the language, or the architecture of existing applications.

Other more specific use-cases may be supported as, for example, extraction of business rules from programs to populate a business-rules engine, modification of an existing system to better integrate with another system, etc…

## Technology layer

The technology layer contains components dedicated to one legacy technology.

These components can be reused between several use-cases components involving the same legacy technology. For example, a use-case computing metrics on Java source code and another providing refactoring for Java applications could reuse the same component.

Use-cases generally involve only one legacy technology (the one used to implement the existing system). Nevertheless, some use-cases can involve several legacy technologies. It is the case when the existing system is heterogeneous, built with several languages. For example, when a system, implemented with Java, stores data into a relational database using JDBC, the use-case may need MoDisco components able to analyse Java and SQL source code.

Each technology component is composed of, at least, a metamodel of the dedicated technology. This metamodel describes the elements required to support modernization use-cases for the corresponding technology. Depending on the kind of use-case the metamodel can be complete (for refactoring or migration) or partial (for cartography or some quality analysis scenarii).

Ideally, the metamodel is completed by a discoverer, a component which aims at building models conforming to the metamodel from artefacts of an existing system. Artifacts analysed by discoverers are not necessarily source code files. There exists multiple other ways a discoverer can find the information needed to create a model of an existing system :

- analysing parameter files
- analysing execution logs
- unzipping an archive to access its contents
- querying a database
- using APIs to access a tool with which the system has been designed
- translating data provided by a reverse-engineering tool into model
- transforming models provided by another discoverer

A MoDisco Technology component can come with utilities dedicated to its metamodel:

- Browsers to navigate the models more easily
- Viewers to represent the models graphically
- Computation of standard metrics
- Transformation to standard metamodels (ASTM, KDM, UML …)
- Generator to regenerate the initial artefact from its model

- See Technology layer's roadmap

## Infrastructure layer

The Infrastructure layer aims at providing components independent from use-cases and legacy technologies.

There will be two kinds of components in this layer :

### MoDisco Knowledge components

These components provide metamodels describing legacy systems independently from their technology. Like components of the Technology layer, these components can come with discoverers or utilities.

Examples of MoDisco Knowledge components are the metamodels from OMG/ADM :

- KDM (Knowledge Discovery Metamodel)
- ASTM (Abstract Syntax Tree Metamodel)
- SMM (Software Metrics Metamodel).

### MoDisco Technical components

These components are utilities to build or facilitate the use of all the other components.

Examples of MoDisco Technical components are :

- abstract discoverers from which concrete discoverers can derive
- a file-system metamodel describing the organization of files and directories
- a model browser facilitating the visualization of MoDisco models

- See MoDisco Infrastructure layer's roadmap

Category:MoDisco

## Updating This Document

This document is maintained in a collaborative wiki. If you wish to update or modify this document please visit http://wiki.eclipse.org/MoDisco/Architecture