Model-Driven Node - 2013

TLDR: This is a Rails-style code generator which uses a java templating engine and XSD schemas to generate a full Nodejs application at an SAP scale (1000+ database tables (collections)).

Github Source Code

I'm turning Marshall McLuhan on his head.

In 2013, the message is now the medium! :)

Design your message (the xsd schema) and let it be the Driver of Change. Generate all other artifacts from your messages and then your bug count, inconsistencies and maintenance plummet. The simplicity of Node.js lends itself to this approach. In theory, your labor-intensive areas become ( in yellow highlights ):

  • Schema design (the xsd)
  • Top-half of UI code
  • Business logic
  • Integration points

Node.js was designed for the modern Web and for this project I'm using the MEAN stack. There's less impedance-mismatch, less transformation (json<->json), less configuration. The application becomes more dynamic but less complex.

Even integration points are simpler because they share common language and design contraints.

Imagine a commercial e-commerce system with 1000+ database tables (aka Websphere Commerce Suite, SAP or Oracle ATG) which is regenerated after custom schema changes. No more five-year projects, no more armies of minions hand-coding bugs year after year...

The template engine is generic. Drop a CRM schema into it. Drop an ERP schema into it and create a full enterprise system with much less complexity. The control points are the schema and templates, it's a level of abstraction above the code.

Model-Driven Node: Multi-tenant
Organizations often have industry-specific interoperability requirements. For instance, the electronics industry has an interoperability specification, RosettaNet, for e-commerce items like an account, order, or invoice. Companies often extend these standards with custom data, which complicates tra…
Model-Driven Node: Object Graph Impedance
Node.js purists may question this synthesis of java tooling and node.js but I’m generating js with java for several reasons: Reflection - It’s better in java. Templating - Velocity is fast, easy, and I haven’t found a js equal yet. Annotations - the jax-rs annotations which are well-defined
Model-Driven Node: Extending XSD Schema
I wanted a better way to bind node-specific behavior to xsd elements. Right now, the jax-rs annotations bind REST paths to xsd elements and it works but... I wanted to extend bindings for other structures (like queues) and avoid using java-specific dependencies. Then I realized I can define my ow…
Model-Driven Node: XJC Compiler
My code generation tool originally used xjc-generated java classes. I tried to remove that dependency with Velocity’s Anakia but it left too many edges cases. Xsd schema rules are more complex than java classes, so then I tried Sun’s XJC schema compiler. Duh. Go to the source. Fifteen bugs later,
Model-Driven Node: Scalability
Most developers think technical spec when they read scalability. Node.js’s claim to fame is bandwidth utilization via an event-driven, non-blocking I/O model. But I’m interested in a different scalability; project scalability, domain scalability, which I predicted in 2006 (when I drew these pictures…
Model-Driven Node: Reference Implementation
This is my reference implementation driven by xsd schemas, a working model of an enterprise app generated by one guy after 160 hours of work. The blue areas are working but I have to clean them up. I finally got Jade to work (version problems with express), so I might
Model-Driven Node: Tags and Queues
Nodejitsu doesn’t support the ZMQ queue, so I switched to Kue. I want to tag an existing xsd schema with web-specific (Model-Driven Node) attributes and generate the entire node.js deployment, leaving a few well-defined interface points for hand-written code. Part 1: Model Driven Node Part 2: Mul…
Model-Driven Node: URL Namespacing
I finally got Kue integrated but I can’t remap its default URLs (which are set to root), as there’s hard-coded references somewhere in Kue. I realized I made the same mistake with ModelDrivenNode so I worked out a better API - /{ApplicationType}/{ApplicationInstance}/{VersionInstance}/{FunctionType…
Model-Driven Node: JSON Editor And Angular
I added an angular-based JSON editor to Model-Driven Node and replaced the jade UI. I’d thought the UI would take ten or twelve templates based on previous projects but presto... DONE in four hours. And then I realized that this was a real tool - a MongoDB Database Explorer. {&lt;