Persistence unified

Revision as of 15:20, 26 August 2007 by Bertrand Meyer (Talk | contribs)

Unified persistence for Eiffel

(Temporary name: PERSIST.)

The PERSIST project is about developing a single, integrated and simple persistence framework for Eiffel:

  • Single: PERSIST should remove the need for any more specific solution such as serialization, object-relational interfaces, interfaces to object-oriented databases, all of which become functionalities of PERSIST.
  • Integrated: PERSIST should integrate existing mechanisms and add new ones as needed, in a consistent framework.
  • Simple: PERSIST should hide all unnecessary complexity from programmers; in Alan Kay's words, easy things should be easy and difficult things should possible.

Community input is expressly sought to help PERSIST achieve these goals.

A tentative manifesto

The first proposed task is to agree upon a sort of ‘manifesto’ of desirable features for the framework.

Here is a first proposal:

  1. Essential abstractions
  2. Independence from persistence code
  3. Uniform access
  4. Encapsulation and extension
  5. Pure Eiffel
  6. Newbie-proof

You can find some details in the following paragraphs.

Essential abstractions

The framework should provide just three abstractions to the developer: PERSISTENCE_MEDIUM, PERSISTENCE_FORMAT and PERSISTENCE_MANAGER.

Possible specializations of these abstractions could be:

  • FILE_MEDIUM, NETWORK_MEDIUM, RELATIONAL_DB_MEDIUM, CUSTOM_MEDIUM, ...
  • BINARY_FORMAT, STRING_FORMAT, XML_FORMAT, DADL_FORMAT, CUSTOM_FORMAT, ...
  • BINARY_SERIALIZATION_MANAGER, RDBMS_MANAGER, CUSTOM_MANAGER, ...

Independence from persistence code

Classes which objects have to be persisted should not be polluted with persistence code, for example by adding specific persistence-related attributes or by inhering from some other class that provides persistence services.

Uniform access

The access to the persistence services should be as uniform as possible. This can be achieved using the XXX_MANAGER class hierarchy that handles access to specific kinds of persistence stores.

Encapsulation and extension

The different media should be properly incapsulated and the same time there should be place for extensions. This can be achieved using the XXX_MEDIUM class hierarchy.

The different formats should be properly incapsulated and the same time there should be place for extensions. This can be achieved using the XXX_FORMAT class hierarchy.

Pure Eiffel

No external calls to C macros, just plain Eiffel should be used to implement the framework

Newbie-proof

Ideally the programmer should only create the desired manager object and invoke the features to store or retrieve an object passing the object itself as an argument.

Diagrams and code samples

Here is a link to the persistence code samples page where you can have a look at some code and a class diagram.

Open discussion

For an open discussion on the design choices please have a look at the persistence framework design discussion.

Additional tasks

Which name?

Find an appropriate name for the framework is, of course, absolutely fundamental. It seems fair that anyone interested could provide one or more names within a certain period of time. After that a poll may be created to determine the winner. A first proposal could be EIUNPE which stands for EIffel UNified PErsistence.

Contacts

  • Marco Piccioni
  • Bertrand Meyer