-
Notifications
You must be signed in to change notification settings - Fork 15
Home
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.
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.
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.
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).
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.
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.
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.
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.
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.
NMF also had a range of projects where the development has stopped. They are listed below for comprehensiveness.
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
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