Why do we need DSL Platform?
Don't we already have enough frameworks and libraries for doing programming the "standard" way?
While it might look that DSL Platform is just another framework for building applications, actually it's not.
DSL Platform is an Invasive software composition platform, meaning that it is used to glue various components together.
When running your application, you will not actually run DSL Platform, but only libraries (glue) generated by it.
Since glue can be generated for various frameworks and libraries you can run your application the way you feel most comfortable, as long as those frameworks and libraries are DSL Platform compatible.
Goal of DSL Platform is to build on top of best frameworks, languages, libraries and platforms.
What are the major differences in programming with DSL Platform?
DSL Platform takes a mostly declarative approach to programming.
Its main premise is that domain model/knowledge is the most important asset.
If you can model your domain using DSL based on Domain-Driven Design, extended with known programming
concepts and patterns, DSL Platform can do many heavy lifting for you.
People have been doing relational modeling in SQL for very long time.
In recent years object modeling in code took over, with translation to SQL using ORMs.
Latest mainstream approach is to do object modeling in the code, without the translation to SQL, but instead using schema-less storage, mostly JSON based.
All those approaches suffer from modeling restrictions.
SQL is great for modeling SQL persistence layers, but often we need models above SQL which are then defined elsewhere.
Knowledge about their interaction doesn't exist and developers have a hard time doing things like cache invalidation since there is not a single unifying model which "understands" when to invalidate the cache.
Object modeling in code can go very far, but it requires attributes/annotations to inject missing information. Often some things just can't be expressed inside a class or a property, so some higher kind of description is required. When projects span multiple languages it becomes very hard to keep in sync model across all of them.
If DDD is viewed as a best practice in modeling and DSL is used to describe models quickly and concisely a lot of problems are simply mitigated.
There is no Impedance mismatch in models built by DSL Platform. Since ORMs are not used and only object-relational databases such as Postgres and Oracle are supported, code/libraries generated by Platform should be the same as someone wrote it manually and optimized it.
What about my database/language of choice?
Postgres is database with the most advanced type system, with the Oracle as close second. In practice this means that Postgres can support models such as
natively without any problems, while Oracle will require some modifications or restrictions, such as:
Since object-relational features are required to avoid Object-relational Impedance mismatch for such use cases, currently only those two databases are supported.
There is a wide support for client side languages, such as Java, C# and PHP. Client side support is relatively easy to do, compared to server side language, since it consists mostly of building on top of server side api.
Currently, only C# server implementation is officially supported by the DSL Platform. JVM implementation exists on top of Scala, but it's missing a lot of features compared to C# implementation.
All libraries are open sourced with a BSD license. Client and server libraries are the best way we currently know how to implement software architecture and satisfy all the requirements for an effective DDD. They are open source so they can evolve or be replaced with a better alternative.