Mo+ Solution Builder is a model oriented programming language and integrated development environment for effective model driven development.
For effective model driven development, Mo+ Solution Builder
uniquely combines a focused and flexible model, a powerful model oriented programming language, and a complete integrated development environment to build and maintain models, and from those models create and maintain code and other documents in many flexible ways.Mo+ Solution Builder
lets software developers create and maintain enterprise solutions, software applications, source code, and other materials very quickly. Business analysts can also use the environment to rapid prototype applications or produce other documents.Mo+
is short for Model Oriented Plus, and is the model oriented programming language that gives users the ability to perform a wide variety of tasks such as creating and maintaining models, documents, and source code in any language. The language has some similarities to object oriented languages such as C# or Java, but has features directly geared towards model driven development.Mo+ Solution Builder
uses the following other open source components:
- The Mo+ interpreter is powered by the Irony parser (https://irony.codeplex.com/).
- Template editing utilizes the AvalonEdit control (http://www.codeproject.com/Articles/42490/Using-AvalonEdit-WPF-Text-Editor).
- Document viewing is enhanced with AvalonDock (https://avalondock.codeplex.com/).
- Search and replace within template documents is enhanced by this Find/Replace Dialog (http://www.codeproject.com/Articles/173509/A-Universal-WPF-Find-Replace-Dialog).
Why Model Driven Development (the Mo+ way)?
The goal is to maximize your ability to create and maintain high quality code that meets ongoing requirements and best practices. The Mo+ way is the only one that combines a model driven and truly model oriented approach to code generation. This approach gives you the greatest degree of control over the creation and maintenance of your generated source code and other documents. Ultimately, this means a higher level of quality at a lower cost.
With a model, you have a greater degree of control over template-only code generation approaches. You can more easily wire together different layers in an application, manage exceptions, and identify where business rules and customizations go. With a platform/tier independent model, you can create and maintain code for more layers than you can with other approaches that provide a model tailored for a specific layer and platform.
To make your Mo+ modeling easier, Mo+ gives you complete control in creating and maintaining your model structures and data from other sources such as databases and xml.
Object oriented programmers know the benefits of object oriented languages over procedural languages in creating large and complex software, benefits such as encapsulation, reusability, modularity, clarity, etc. Why shouldn't you have these same benefits from a code generation perspective? You do with Mo+!
While other code generation template approaches are procedural in nature, Mo+ templates are model oriented. Mo+ templates can be used by other templates just like any other built in property or method. They can be used in expressions, in creating content, and updating output. You can easily divide and conquer complex tasks and specify your conventions and best practices in reusable templates. This high level of reusability of Mo+ templates over other forms of templates will make it easier to maintain and evolve your code to meet ever changing requirements.
Most other code generation approaches focus on the initial generation of your code. You have little or no control during ongoing maintenance. With the Mo+ approach, you have full control over creating and updating your code and other documents, as well as removing outdated ones.
To make your work even easier, we plan to continually build upon the set of template libraries (with community input and review) for different models, applications, components, and other documents in various platforms and languages.
For effective model driven development, Mo+
and the Mo+ Solution Builder
designs are based on the following notions:
- You Need a Model - You need a model to represent what you want your system to be and to do. Without the ability to specify the structure and behavior of your system, you are limited in what you can do from a code generation and other automation standpoints.
- Simple, Focused, Flexible Model – The model structure should be simple, flexible, and focused with only the information needed for model driven development. Design, platform, and tier details should be left out of the model and be handled by processes that utilize the model. Overall, you need the modeling effort to be low.
- Complete Access to Model – You need the ability to populate your models in any way you see fit. You need the ability to indicate exceptions or other conditions. You may need to create your own model structures. You need the ability to easily recognize your model structures. You need flexible ways to browse, search, and retrieve your model data to perform your tasks.
- Maximized Code Generation – You need the ability to make the most of your model information, and maximize the quality (not necessarily the quantity) of your auto managed code. Yet overall, you want the code generation effort to be relatively small.
- Seamless Integration with Custom Code – You need seamless integration of auto managed documents with your custom code. You need the ability to insert and maintain exceptions and specific business rules within generated documents. You need generated and custom documents to coexist gracefully.
- Complete Control of Code Generation – You can’t afford to have all of your code regenerated every time as part of a team development effort. You need to have full control as to if, when, where, and how to update your generated documents.
- Best Practices – You want full control over your auto managed documents so that they meet your organization and industry best practices and other requirements.
How does Mo+ Solution Builder work?
Mo+ Solution Builder
includes some basic features such as:
- The ability to view and edit solution models.
- The ability to load solution model information from database and xml sources (and customize that model data).
- The ability to create and maintain output solutions, including source code in any language, other models, and other kinds of documents.
- The ability to create, edit, organize, and debug specification and code templates written in Mo+.
Using Mo+ Solution Builder
, users can create models and output solutions very quickly using libraries of templates created internally or downloaded. The following diagram outlines the basic process of how this is done.
In a nutshell, the basic process of using Mo+ Solution Builder
to create models and output solutions is:
- Using the Solution Builder Interface, the user creates a solution model, optionally specifying where model information is going to come from as specification sources. For each specification source, the user chooses a Mo+ template which outlines how to update model information from that source.
- The Specification Interpreter processes each specification source to evaluate the Specification Input (such as a database or XML file), and update information in the solution model, based on instructions in the corresponding templates. The Specification Interpreter adds information to the model such as features, entities, properties, relationships, and methods, etc.
- The user can further customize the solution model, adding or modifying features, entities, properties, relationships, methods, etc.
- The user creates projects in the solution model, which specifies what kind of Solution Output to produce. For each project, the user chooses a Mo+ template which outlines how to create and update Solution Output.
- The Code Interpreter processes each project to evaluate the Mo+ model, and update Solution Output, based on instructions in the corresponding templates. The Code Interpreter creates and updates information such as source code files, project files, database tables or procedures, test cases, configuration files, and other documents.
- Using the Solution Builder Interface, the user can also create, edit, and debug Mo+ Specification Templates and Mo+ Code Templates to tailor model updates or solution output updates.
- The user saves the Mo+ model as a Mo+ Model Doc. This document is simply an XML file that stores only the information that the user creates directly (not information interpreted from specification sources).
To learn more about Mo+
and the Mo+ Solution Builder
, there are a number of tutorials in the documentation section (https://moplus.codeplex.com/documentation
). The lower numbered tutorials cover simpler topics, while higher numbered ones delve deeper into features and capabilities.
Also, if you download and install the Mo+ Solution Builder
, there is on board help that provides a detailed how to and reference.
We intend to build upon the Mo+
foundation with you, the community, in the driver's seat. We want you to determine what the best features in the language and user interface should be. We want you to determine what the ideal model structures should look like, what the best sample template libraries in various platforms should be from a best practice standpoint.
Coming soon, the membership web site (http://ModelOrientedPlus.com
) will be set up to make best use of your feedback and contributions going forward. This CodePlex site will remain the place to get the software source and downloads, tutorials, and sample packs.
For additional support:
• Create or join a discussion in the Discussions area (https://moplus.codeplex.com/discussions
• Post an issue in the Issues area (https://moplus.codeplex.com/workitem/list/basic
• Post an issue at Stack Overflow (http://stackoverflow.com
) Use the Mo+
tag when posting issues.
• Coming soon! Become a member at http://ModelOrientedPlus.com
for additional support and benefits.Copyright (C) 2014
Dave Clemmer, Intelligent Coding Solutions, LLCMo+
is a registered trademark of Intelligent Coding Solutions, LLC.