mirror of
https://github.com/danieleteti/delphimvcframework.git
synced 2024-11-16 00:05:53 +01:00
283 lines
10 KiB
Plaintext
283 lines
10 KiB
Plaintext
|
||
Synopse mORMot framework
|
||
|
||
An Open Source Client-Server ORM/SOA framework
|
||
(c) 2008-2021 Synopse Informatique
|
||
https://synopse.info
|
||
http://mormot.net
|
||
|
||
Contributors
|
||
Alan Chate
|
||
Alexander (sha)
|
||
Alexander (volax)
|
||
AlexPirate
|
||
Alfred Glaenzer (alf)
|
||
Andre Heider (dhewg)
|
||
Antoine Simard (AntoineGS)
|
||
Arnaud Bouchez
|
||
ASiwon
|
||
Aweste
|
||
Bas Schouten
|
||
BigStar
|
||
BugsDigger
|
||
Cheemeng
|
||
CoMPi
|
||
Damien (ddemars)
|
||
Darian Miller
|
||
Daniel Kuettner
|
||
David Mead (MDW)
|
||
Delphinium (louisyeow)
|
||
DigDiver
|
||
Dominikcz
|
||
EgorovAlex
|
||
Emanuele (lele9)
|
||
Eric Grange
|
||
Esmond
|
||
Esteban Martin (EMartin)
|
||
Eugene Ilyin
|
||
Eva Freimann (EVaF)
|
||
F-Vicente
|
||
Goran Despalatovic (gigo)
|
||
Jean-Baptiste Roussia (jbroussia)
|
||
Joe (jokusoft)
|
||
Johan Bontes
|
||
Jordi Tudela
|
||
Kevin Chen
|
||
Lagodny
|
||
Leon Oosthuizen
|
||
Macc2010
|
||
Maciej Izak (hnb)
|
||
Marcos Douglas B. Santos (mdbs99)
|
||
Mario Moretti
|
||
Marius Maximus (mariuszekpl)
|
||
Martin Eckes
|
||
Martin Suer
|
||
Mapes
|
||
Matkov
|
||
Maxim Masiutin
|
||
Mazinsw
|
||
MChaos
|
||
Miab3
|
||
Michael (EgonHugeist)
|
||
Michalis Kamburelis
|
||
MilesYou
|
||
Mingda
|
||
Mr Yang (ysair)
|
||
Nicolas Marchand (MC)
|
||
Nortg
|
||
Nzsolt
|
||
Oleg Tretyakov
|
||
Ondrej (reddwarf)
|
||
Pavel Mashlyakovskii (mpv)
|
||
Pierre le Riche
|
||
RalfS
|
||
Richard6688
|
||
Sabbiolina
|
||
Sanyin
|
||
Sinisa (sinisav)
|
||
Sllimr7139
|
||
SSoftPro
|
||
Stefan (itSDS)
|
||
Svetozar Belic (transmogrifix)
|
||
Transmogrifix
|
||
Uian2000
|
||
Vaclav
|
||
Vadim Orel
|
||
Willo vd Merwe
|
||
Win2014
|
||
Wloochacz
|
||
Wolfgang Ehrhardt
|
||
Yoanq
|
||
Ysair
|
||
Zed
|
||
|
||
[See below if you upgrade from 1.17 revision]
|
||
|
||
|
||
Synopse mORMot is an Open Source Client-Server ORM SOA MVC framework
|
||
for Delphi 6 up to Delphi 10.3 Rio and FPC, targeting Windows/Linux
|
||
for servers, and any platform for clients (including mobile or AJAX).
|
||
|
||
The main features of mORMot are therefore:
|
||
|
||
- ORM/ODM: objects persistence on almost any database (SQL or NoSQL);
|
||
- SOA: organize your business logic into REST services;
|
||
- Clients: consume your data or services from any platform, via ORM/SOA APIs;
|
||
- Web MVC: publish your ORM/SOA process as responsive Web Applications.
|
||
|
||
With local or remote access, via an auto-configuring Client-Server REST design.
|
||
|
||
Due to its modular design, switch from a Client-Server architecture over
|
||
HTTP, named pipes or GDI messages into a stand-alone application is just
|
||
a matter of mORMot classes initialization.
|
||
For instance, the very same executable can even be running stand-alone,
|
||
as a server, as a service, or a client, depending on some run-time parameters!
|
||
|
||
Emphasizing simplicity, speed and versatility, mORMot is a incredibly well
|
||
documented Open Source project easy enough to add basic ORM or Client-Server
|
||
features to simple applications for hobbyists, or let experienced users
|
||
develop scaling and strong service-based projects for their customers, with
|
||
the advantages of native code and easy-to-deploy solutions, reducing
|
||
deployment cost and increasing ROI.
|
||
|
||
It provides an Open Source self-sufficient set of units (even Delphi starter
|
||
edition is enough) for creating any application, from a stand-alone solution
|
||
up to the most complex Domain-Driven Design (DDD):
|
||
|
||
- Presentation layer featuring MVC UI generation with i18n and reporting
|
||
(with pdf export) for rich Delphi clients, MVC web clients (with logic-less
|
||
Mustache templates) or rich AJAX clients (via native JSON/REST access);
|
||
|
||
- Application layer implementing Service Oriented Architecture via
|
||
interface-based services (like WCF) and Client-Server ORM (including
|
||
method-based services) - following a RESTful model using JSON over several
|
||
communication protocols (e.g. HTTP/1.1);
|
||
|
||
- Domain Model layer handling all the needed business logic in plain Delphi
|
||
objects, including high-level managed types like dynamic arrays or records
|
||
for Value Objects, dedicated classes for Entities or Aggregates, and variant
|
||
storage with late-binding for dynamic documents;
|
||
|
||
- Data persistence infrastructure layer with ORM operations on direct
|
||
Oracle, MS SQL, OleDB, ODBC, ZEOS/ZDBC access or any TDataSet provider (e.g.
|
||
FireDAC/AnyDAC, UniDAC, NexusDB, BDE...), with a powerful SQLite3 kernel,
|
||
and optional SQL access if needed, with amazing performance and advanced
|
||
features like Array DML, auto-generating SQL for SQLite3, Oracle,
|
||
Jet/MSAccess, MS SQL, Firebird, DB2, PostgreSQL, MySQL and NexusDB - and
|
||
alternative high-speed MongoDB NoSQL database access for ODM persistence;
|
||
|
||
- Cross-Cutting infrastructure layers for handling data filtering and
|
||
validation, security (e.g. Windows authentication or any custom model),
|
||
caching, logging and testing (framework uses test-driven approach and
|
||
features interface stubbing and mocking).
|
||
|
||
With mORMot, ORM/ODM is not used only for data persistence of objects (like
|
||
in other implementations), but as part of a global n-Tier, Service Oriented
|
||
Architecture (SOA), ready to implement Domain-Driven solutions. This
|
||
framework is not an ORM on which a transmission layer has been added, like
|
||
almost everything existing in Delphi, C# or Java: this is a full Client-Server
|
||
ORM/SOA from the ground up.
|
||
This really makes the difference.
|
||
|
||
The business logic of your applications will be easily exposed as Services,
|
||
and will be accessible from light clients (written in Delphi or any other
|
||
mean, including AJAX).
|
||
The SpiderMonkey JavaScript engine has been integrated on the server side
|
||
and can be used to define business rules or any process (including MVC web
|
||
rendering) - just like node.js, but with a multi-threaded core, and the
|
||
full power of our optimized Delphi libraries at hand.
|
||
|
||
The framework Core is non-visual: you will get everything you need in a
|
||
consistent set of classes to be used from code. In order to let you focus
|
||
on your business, using mORMot's KISS/DRY/SOC/YAGNI/TDD and Convention Over
|
||
Configuration patterns. But you have also some UI units available (including
|
||
screen auto-generation, reporting and ribbon GUI), and you can use it from
|
||
any RAD, web, or AJAX clients (via JavaScript or Smart Mobile Studio).
|
||
|
||
No dependency is needed on the client side (no DB driver, or third-party
|
||
runtime): it is able to connect via standard HTTP, even through a corporate
|
||
proxy or a VPN. Rich Delphi clients can be deployed just by copying and running
|
||
a stand-alone small executable, with no installation process. Stream can be
|
||
encrypted via HTTS or with proven SHA/AES-256. Endpoints are configured
|
||
automatically for each published interface on both server and client sides,
|
||
and creating a load-balancing proxy is a matter of one method call.
|
||
Speed and scalability has been implemented from the ground up: a genuine
|
||
optimized multi-threaded core let a single server handle more than 50,000
|
||
concurrent clients, faster than DataSnap, WCF or node.js, and our rich SOA
|
||
design is able to implement both vertical and horizontal scalable hosting,
|
||
using recognized enterprise-level SQL or NoSQL databases for storage.
|
||
|
||
Even if mORMot will be more easily used in a project designed from scratch,
|
||
it fits very well the purpose of evolving any existing Delphi project, or
|
||
creating the server side part of an AJAX application.
|
||
|
||
Licensed under a disjunctive tri-license giving you the choice of one of
|
||
the three following sets of free software/open source licensing terms:
|
||
- Mozilla Public License, version 1.1 or later;
|
||
- GNU General Public License, version 2.0 or later;
|
||
- GNU Lesser General Public License, version 2.1 or later.
|
||
This allows the use of our code in as wide a variety of software projects
|
||
as possible, while still maintaining copy-left on code we wrote.
|
||
|
||
Main project page:
|
||
http://mORMot.net
|
||
|
||
Documentation:
|
||
https://synopse.info/files/html/Synopse%20mORMot%20Framework%20SAD%201.18.html
|
||
|
||
Installation:
|
||
https://synopse.info/files/html/Synopse%20mORMot%20Framework%20SAD%201.18.html#TITL_113
|
||
|
||
FAQ:
|
||
https://synopse.info/files/html/Synopse%20mORMot%20Framework%20SAD%201.18.html#TITL_123
|
||
|
||
How to get the source:
|
||
https://synopse.info/fossil/wiki?name=Get+the+source
|
||
|
||
A forum is dedicated to support:
|
||
https://synopse.info
|
||
|
||
A blog is available:
|
||
http://blog.synopse.info
|
||
|
||
Issues and feature requests can be posted (take a look at the forums
|
||
and latest unstable version first!):
|
||
https://synopse.info/fossil/reportlist
|
||
|
||
You can also monitor/fork our projects on GitHub:
|
||
https://github.com/synopse/mORMot
|
||
|
||
You may also install it as a Delphinus package: Delphinus-Support
|
||
|
||
Don't forget to download the documentation (available online or as pdf files,
|
||
created by our SynProject tool).
|
||
In particular, you should take a look at all general introduction chapters
|
||
of the SAD document. It will cover all key-concepts and code modelling
|
||
used by the framework.
|
||
A developer guide is included in this SAD document, in its 2nd part. You'll
|
||
get good practice guidance, presentation of the ORM/SOA approach and other
|
||
underlying concepts.
|
||
|
||
Feel free to contribute by posting enhancements and patches to this
|
||
quickly evolving project.
|
||
|
||
Enjoy!
|
||
|
||
|
||
Some units (e.g. SynPdf, SynGdiPlus, SynBigTable, SynCommons, SynCrypto,
|
||
SynDB*, SynSQLite3, SynMongoDB, SynMustache, SynSM, mORMotReport) are used
|
||
by mORMot, but do not require the whole framework to be linked.
|
||
That is, you can use e.g. only PDF generation, SynDB fast database
|
||
access, a static-linked SQLite3 engine, direct MongoDB access, Mustache
|
||
templates, SpiderMonkey JavaSCript engine, code-generated reports, or
|
||
the TDocVariant, TDynArray, TSynLog classes of SynCommons, without using
|
||
the main mORMot units and features (ORM, Client-Server, services, UI).
|
||
|
||
Some of those units can even be compiled with Delphi 5 (e.g. SynPdf, SynDB).
|
||
|
||
|
||
Quick Steps when upgrading from a previous 1.17 revision:
|
||
|
||
1) Note that some units where renamed, and some breaking changes introduced
|
||
by some enhanced features, therefore a direct update is not possible
|
||
|
||
2) Erase or rename your whole previous #\Lib directory
|
||
|
||
3) Download latest 1.18 revision files as stated just above
|
||
|
||
4) Change your references to mORMot units:
|
||
- Add in your uses clause SynLog.pas and/or SynTests.pas if needed;
|
||
- Rename in your uses clause any SQLite3Commons reference into mORmot;
|
||
- Rename in your uses clause any SQLite3 reference into mORMotSQLite3;
|
||
- Rename in your uses clause any other SQlite3* reference into mORMot*;
|
||
- Add in one uses clause a link to SynSQLite3Static (for Win32).
|
||
|
||
5) Consult the units headers about 1.18 for breaking changes, mainly:
|
||
- TSQLRecord.ID: TID primary key, TIDDynArray, and TRecordReference are now Int64;
|
||
- Renamed Iso8601 low-level structure as TTimeLogBits;
|
||
- TJSONSerializerCustomReader/Writer callbacks changed;
|
||
- TSQLRestServerCallBackParams replaced by TSQLRestServerURIContext class;
|
||
- TSQLRestServerStatic* classes renamed as TSQLRestStorage*;
|
||
- rmJSON* enums replaced by TSQLRestRoutingREST/JSON_RPC classes;
|
||
- Changed '<27>' into '~' character for mORMoti18n language files.
|