We introduced DDD concepts some time ago, in a series of articles in this blog. At that time, we proposed a simple way of using mORMot types to implement DDD in your applications. But all Domain Entitities being tied to the framework TSQLRecord class did appear as a limitation, breaking the […]
Tag - EntityObject
2015-05-18
CQRS Persistence Service of any DDD object with mORMot
2015-05-18. Open Source › mORMot Framework
2014-06-22
Audit-trail for ORM change tracking
2014-06-22. Open Source › mORMot Framework
Since most CRUD operations are centered within the scope of our
mORMot server, we implemented in the ORM an integrated mean of
tracking changes (aka Audit Trail) of any TSQLRecord
.
In short, our ORM is transformed into a time-machine, just like the good old
DeLorean!
Keeping a track of the history of business objects is one very common need
for software modeling, and a must-have for any accurate data modeling,
like Domain-Driven Design.
By default, as expected by the OOP model, any change to an object will forget
any previous state of this object. But thanks to mORMot's exclusive
change-tracking feature, you can persist the history of your objects.
Enabling audit-trail
By default, change-tracking feature will be disabled, saving performance and
disk use.
But you can enable change tracking for any class, by calling the following
method, on server side:
aServer.TrackChanges([TSQLInvoice]);
This single line will let aServer: TSQLRestServer
monitor all
CRUD operations, and store all changes of the TSQLInvoice
table
within a TSQLRecordHistory
table.
2014-02-28
Are NoSQL databases ACID?
2014-02-28. Open Source › mORMot Framework
One of the main features you may miss when discovering NoSQL ("Not-Only SQL"?) databases, coming from a RDBMS background, is ACID.
ACID (Atomicity, Consistency, Isolation, Durability) is a set of properties that guarantee that database transactions are processed reliably. In the context of databases, a single logical operation on the data is called a transaction. For example, a transfer of funds from one bank account to another, even involving multiple changes such as debiting one account and crediting another, is a single transaction. (Wikipedia)
But are there any ACID NoSQL database?
Please ensure you read the Martin Fowler
introduction about NoSQL databases.
And the corresponding
video.
First of all, we can distinguish two types of NoSQL databases:
- Aggregate-oriented databases;
- Graph-oriented databases (e.g. Neo4J).
By design, most Graph-oriented databases are ACID!
This is a first good point.
Then, what about the other type?
In Aggregate-oriented databases, we can identify three sub-types:
- Document-based NoSQL databases (e.g. MongoDB, CouchDB);
- Key/Value NoSQL databases (e.g. Redis);
- Column family NoSQL databases (e.g. Cassandra).
It may be schema-less, blob-stored, column-driven, but it is always some set of values bound together to be persisted.
This set of values define a particular state of one entity, in a given model.
Which we may call Aggregate.
2014-01-04
Domain-Driven Design: part 4
2014-01-04. Open Source › mORMot Framework

One year ago, we already made a quick presentation of
Domain-Driven Design, in the context of our mORMot
framework.
After one year of real-world application of those patterns, it is now time to
give more light to DDD.
Let's continue with part 4, which will define Domain-Driven Design as could be implemented with our Synopse mORMot framework
Domain-Driven Design: part 3
2014-01-04. Open Source › mORMot Framework

One year ago, we already made a quick presentation of
Domain-Driven Design, in the context of our mORMot
framework.
After one year of real-world application of those patterns, it is now time to
give more light to DDD.
Let's continue with part 3, which will define Domain-Driven Design patterns and principles - this will be the main article of the whole serie!
Domain-Driven Design: part 2
2014-01-04. Open Source › mORMot Framework

One year ago, we already made a quick presentation of
Domain-Driven Design, in the context of our mORMot
framework.
After one year of real-world application of those patterns, it is now time to
give more light to DDD.
Let's continue with part 2, which will define Domain-Driven Design high-level model principles.
Domain-Driven Design: part 1
2014-01-04. Open Source › mORMot Framework

One year ago, we already made a quick presentation of
Domain-Driven Design, in the context of our mORMot
framework.
After one year of real-world application of those patterns, and a training made
by a great French software designer named Jérémie Grodziski, it is now time to give more
light to DDD.
Let's start with part 1, which will be a general introduction to Domain-Driven Design, trying to state how it may be interesting (or not) for your projects.
2013-01-20
Adding JavaScript server-side support to mORMot
2013-01-20. Open Source › mORMot Framework
A long-time mORMot user and contributor just made a proposal on our
forums.
He did use mORMot classes to integrate a SpiderMonkey
JavaScript engine to our very
fast and scaling HTTP server, including our optimized JSON serialization
layer.
Today, he sent to me some of his source code, which sounds ready to be included in the main trunk!
This is a great contribution, and Pavel's goal is nothing less than
offering
Delphi based, FAST multithreaded server with ORM and node.js modules
compatible.
2013-01-05
Domain-Driven-Design and mORMot
2013-01-05. Open Source › mORMot Framework
Implementing Domain-Driven-Design (DDD) is one goal of our mORMot framework.
We already presented this particular n-Tier architecture.
It is now time to enter deeper into the material, provide some definition
and reference.
You can also search the web for reference, or look at the official web site.
A general
presentation of the corresponding concepts, in the .NET world, was used as
reference of this blog entry.
Stay tuned, and ride the mORMot!