How DSL works

Domain-Driven Design

Declarative specification is defined using industry standard concepts and terminology for client domain. This results in understandable documentation which is also a formal specification. Compilers use that specification to build code/html and maintain/migrate database.

Client code

Various features are available in the automatically maintained model. Developer can focus on important parts, such as specific features and user experience. Advanced features, such as event sourcing, olap analytics are available with a few lines of code.

Database

Tables, views, functions, casts, types and other features specific to the database are used. State of the art migrations are utilized, so there is no need for manual intervention. Object-relational databases are keept in sync with the DSL model.

1. Domain-Driven Design
Declarative specification is defined using industry standard concepts and terminology for client domain. This results in understandable documentation which is also a formal specification. Compilers use that specification to build code/html and maintain/migrate database.

2. Client code
Various features are available in the automatically maintained model. Developer can focus on important parts, such as specific features and user experience. Advanced features, such as event sourcing, olap analytics are available with a few lines of code.

3. Database
Tables, views, functions, casts, types and other features specific to the database are used. State of the art migrations are utilized, so there is no need for manual intervention. Object-relational databases are keept in sync with the DSL model.

Model your domain using Domain-Driven Design

DSL model

Model is described using language specialized for such task. Even domain experts can read such descriptions.

DSL compilers

DSL is a functional specification for compilers. Model will be checked for errors. Type safety will be integrated into the targets, even when they don't support it.

Typesafe PHP

Classes will have type safety embedded within them. Programming errors will be caught as early as possible.

App Server

Stateless application server can be added as required. Reporting, data analytics, event sourcing or any other custom feature can be consumed through JSON/XML/Protobuf.

Database

By using object-relational database in an advanced way, there is no need for ORM tools because Object-relational impedance mismatch doesn't exists.

1. DSL model
Model is described using language specialized for such task. Even domain experts can read such descriptions.

2. DSL compilers
DSL is a functional specification for compilers. Model will be checked for errors. Type safety will be integrated into the targets, even when they don't support it.

3. Typesafe PHP
Classes will have type safety embedded within them. Programming errors will be caught as early as possible.

4. App Server
Stateless application server can be added as required. Reporting, data analytics, event sourcing or any other custom feature can be consumed through JSON/XML/Protobuf.

5. Database
By using object-relational database in an advanced way, there is no need for ORM tools because Object-relational impedance mismatch doesn't exists.

DSL code

Escape the trap of writing 'models' in your code. Reuse same model in different technologies without friction.

Compiler

Extensible compilers will take care of converting dsl to various languages using best practices. This helps with mainaining high level of quality since extensive experience is provided in compiled libraries.

Languages support

With support for various languages, it was never easier to use best tool for the job. .NET/JVM for the backend. Dynamic languages for the frontend. Java for Android ,...

Database

Automatically maintained stored procedures for best performance. LINQ conversions to database functions and expressions at compile time. Cache invalidation from messaging system. Combine multiple database request in a single call by using reports and similar concepts.

1. DSL code
Escape the trap of writing 'models' in your code. Reuse same model in different technologies without friction.

2. Compiler
Extensible compilers will take care of converting dsl to various languages using best practices. This helps with mainaining high level of quality since extensive experience is provided in compiled libraries.

3. Languages support
With support for various languages, it was never easier to use best tool for the job. .NET/JVM for the backend. Dynamic languages for the frontend. Java for Android ,...

4. Database
Automatically maintained stored procedures for best performance. LINQ conversions to database functions and expressions at compile time. Cache invalidation from messaging system. Combine multiple database request in a single call by using reports and similar concepts.