Key Concepts NReco framework background


components design

All NReco components and framework in whole are designed with concept of loose coupling. This means that:
  • components represented by classes declare minimal and abstract dependencing from other components, in most cases depencencies are declared as interfaces, abstract classes or delegates. Continuations, closures are widely used in addition to classic OOP-patterns.
  • components represented by assemblies/nuget packages declare minimal dependencies from other assemblies/nuget packages
As result most parts of NReco framework can be used independently: you can use NI.Data, NI.Ioc, NI.Vfs, NReco Commons and other standalone components as they are not tied on NReco framework infrastructure.

NReco framework provides an infrastructure (based on XML-configurable IoC-container and NuGet packages) for constructing application from buiding blocks.

model-driven approach

NReco framework provides production-ready technology for model-driven development in .NET projects. Its essence in brief:
  • domain-specific models are based on XML and represented as XML files; metamodels are represented as XSD definitions.
  • XSLT is used as model transformation language that generates low level platform-specific artifacts (IoC-container XML configuration, ASP.NET templates, C#/Javascript code etc) that reflect abstract XML model.
MDD infrastructure includes special tool that performs all necessary XML-model transformations at build time.

NReco MDD technology is highly integrated with VisualStudio: intellisense is available when editing XML-models (by XSD), model transformations are absolutely transparent (supported as special file build action "XML Model").

reusable packages

NReco supports an idea that application should include only components that are really needed for implementing application-specific logic. Unlike classic solid application frameworks NReco is decomposed into set of reusable building blocks (nuget packages) that are organized into one concepts (features) dependency tree.

An approach when application is assembled from reusable blocks by applying transformation rules over application configuration is called concept merging. It doesn't require any special tool since nuget provides necessary technology support (package dependencies, install/uninstall XDT rules). Practically this means:
  • you may choose which NReco packages to install for concrete project.
  • NReco packages may be easily extended with 3rd party packages.
  • NReco infrastructure in conjunction with concept merging approach may be used for organizing cost-effective software product line for .NET projects.