Jump to content

User:Alexyakunin/DataObjects.Net

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Alexyakunin (talk | contribs) at 07:53, 26 May 2009. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
DataObjects.Net
Developer(s)X-tensive.com
Stable release
4.0 beta / May 2, 2009 (2009-05-02)
Written inC#
Operating systemMicrosoft Windows
Platform.NET 3.5
TypeObject-relational mapping
LicenseGNU v3 or commercial
Websitehttp://wiki.dataobjects.net/

DataObjects.Net is rapid database application development framework.

It combines comprehensive business logic layer (BLL) development framework, object-relational mapper (ORM) and a set of storage providers enabling the same BLL code to work transparently on any of them. The framework can be used to develop generally any application dealing with persistent data.

Besides other features, DataObjects.Net has built-in embedded database, so it can be used both with and without SQL database.

DataObjects.Net is open source product available under GPL and commercial licenses. The most current version is 4.0.

History

First version of DataObjects.Net was initially designed in 2003 for use in rather special set of cases, mainly – in web-based document management systems. DataObjects.Net 1.0 was developed in ~ 9 months by a 3 - person team. Many its limitations appeared just because authors didn’t though it will be practically useful in much wider set of cases. An example of such limitation is pre-defined type of identifier and version. Nevertheless its initial design was innovative for that period in comparison to other persistence frameworks on the market.

In 2007 it won Reader's Choice Award in dot.net Magazin.

Brief revision history:

v1.X (July-December 2003)

  • Basic persistence and mapping features.
  • OQL-like queries
  • Serialization
  • Automatic transactions, "Unit of work" pattern implementation based on nested transactions

Initial set of unique features includes:

  • Paired properties
  • Translatable properties
  • Automatic schema upgrade
  • Integrated full-text indexing and search.

v2.X (January - December 2004)

  • Per-object, access control list (ACL) based access control and security system
  • Value types (struct-like objects), ValueTypeCollection
  • Adapter for conversion to and from DataSets
  • BindingManager for ASP.NET
  • Other improvements include persistence of delegates, possibility to use IFilter in full-text indexing, reacher query language.

v3.X (January 2005 - December 2008)

  • .NET Framework 2.0 support
  • Query profiler, profiling API
  • Versionizing mode allowing to browse the state of entities at any previous moment of time in read-only mode
  • Offline (disconnected) entities
  • Global cache: caching of entities across all the sessions
  • Table partitioning support. There are "emulated" and "native" modes, the last one relies on built-in capabilities of RDBMS.
  • Built-in full-text search engine can use Lucene.NET
  • Public API for entity state change and session event tracking
  • Better integration with ASP.NET and Windows Forms.

Currently this branch is supported by developers, bugs are fixed, but no new features are added.

v4.X (first preview in September 2008; final release in June 2009)

Finally the team of developers has made a decision to completely redesign the framework. New implementation is known as DataObjects.Net v4.0. Works on this version were started in December 2006. In September 2008 v4.0 was publicly shown for the first time, although some features (LINQ, schema evolution) were missing in it yet. DataObjects.Net v4.0 final will be released in May 2009.

Features of DataObjects.Net v4.0

  • High level of storage independence. DataObjects.Net allows to transparently migrate between SQL database and index storages, providing:
    • Built-in embedded database supporting all the framework features including indexes and LINQ allows to use the product without third-party SQL database at all.
    • Built-in in-memory database (IMDB) allowing to use LINQ queries and indexes on the client and simplifying unit testing.
  • Relying on PostSharp[1] to implement persistent properties and override persistent object's behavior in AOP fashion.
  • Object-relational mapping layer providing support for:
    • Automatic creation and upgrade of the database schema on each Domain startup. The upgrade process is fully customizable. Original data is either kept, transformed, or moved to so-called recycle types to be used in custom upgrade handlers.
    • Class mapping: framework supports 3 common mapping strategies: class to table, class to concrete table, hierarchy to table. So inheritance is fully supported.
    • Interface mapping: DataObjects.Net is capable of mapping interfaces to materializing tables, as well as to ordinary tables, to which Entities implementing the interface are mapped. Materializing tables can be indexed.
    • Structures: struct-like objects that Entities may aggregate.
    • Arbitrary primary key types, combined primary keys.
    • Transparent persistence. No necessity to call neither something like DataContext.Register(newEntity) nor DataContext.Save() -like methods.
    • Indexes.
    • LINQ.
  • Business logic related features:
    • "Unit-of-work" pattern implementation and error compensation based on integrated Atomicity framework.
    • Support for master-slave and P2P synchronization scenarios between storages running DataObjects.Net out of the box.
  • Performance: framework caches query compilation and optimization results, compiled expressionsCite error: A <ref> tag is missing the closing </ref> (see the help page).
  • Built-in in-memory database provider

See also

References