Skip to content
Georg Hinkel edited this page Oct 27, 2023 · 3 revisions

Table of Contents

.Net Modeling Framework

The .Net Modeling Framework (NMF) is a framework to support model-driven engineering using .NET technologies. It consists of several subprojects that ease various model-driven tasks, such as generating code for model representation, or languages to support model transformation, synchronization and optimization.

Models

The Models project defines the NMeta meta-metamodel and the classes that the generated code for the model representation is based upon. As such, the Models project supports the serialization and deserialization of models to XMI, as well as the resolution or creation of model URIs.

Transformations

NMF Transformations consists of a framework for model transformations (NMF Transformations Core) and an internal DSL for C# (VB.NET supported as well), built on top of NMF Transformations Core, the NMF Transformations Language (NTL). NTL provides several important abstractions known from model transformation and provides these abstractions for model transformations in C#.

NMF Transformations does not rely on the input or output models being NMeta models. Rather, any CLR classes can be used as input or output models.

Expressions

NMF Expressions is a subproject responsible for the incremental and reversable evaluation of expressions. The framework takes expressions of the _System.Linq.Expressions_ namespace that can be obtained e.g. directly through lambda expressions in C# and evaluates them incrementally and reversable (if possible).

Synchronizations

NMF Synchronizations is an internal DSL for model synchronizations. That is, one can define correspondence rules and the framework synchronizes models according to these rules. *NMF Synchronizations supports various kinds of change propagation*, where the change propagation mode is only defined by clients. Thus, the correspondence rules can be reused for multiple modes, similar to TGGs.

Interop

The purpose of NMF EcoreInterop is to provide an interopability layer with Ecore from EMF. This interopability is already included in the Models project, as NMeta uses a very similar model addressing scheme as EMF does, but NMF EcoreInterop furthermore provides transformations to transform an Ecore metamodel into an NMeta metamodel, e.g. to generate code for this metamodel. Thus, NMF EcoreInterop is a good candidate to transition the platform and handle models originally created with the EMF tool stack with .NET tools.

Serialization

The serialization project is the technical basis for the serialization, but independent of NMeta. It provides a generic XML serializer that - unlike the XML serializer from the BCL - is able to cope with circular references. Similar, the serializer is steered through attributes.

Collections

NMF Collections is library that contains several collection classes that are missing in the .NET framework like ordered sets or observable sets. Furthermore, basic implementations for various opposite collections are given, i.e. collections where the containment in this collection is mirrored elsewhere.

Tools

The NMF Project consists of multiple tools.

The Utilities project consists of a set of cross-cutting helper functionality. This includes the conversion of strings to Pascal Case or Camel Case, as well as generic operators like Closure.

Next, a console application exists that is able to generate C# or VB.NET code from metamodels specified in Ecore or NMF. If the metamodel was specified in Ecore, an equivalent NMF metamodel can be generated.

Former subprojects (development stopped)

NMF also had a range of projects where the development has stopped. They are listed below for comprehensiveness.

Optimizations

NMF Optimizations is a framework to support domain-specific optimizations. Its main purpose is to provide an easy way to specify optimizations that can be solved with a modified brute-force algorithm. For this to work, one only has to specify modifications that can be done in the model and how they are reversed. The optimization then modifies the given model and finds the optimal model according to a cost function.

Chance for revival: Moderate

AnyText

The goal of the AnyText project was to create an easy to use grammar system, similar to xText. For this, AnyText was based on Irony. A grammar was available that could parse other grammars and a type system could be generated for it.

Chance for revival: Low