Thursday, July 05, 2007

The perfect infrastructure (framework?) for data systems

The perfect  infrastructure (framework?)  for data systems:

  • Has an object relational query language (something like JQL or LINQ) 
  • Has a database with versioning (like Subversion) so you can always consult the database as it was in a particular moment in time transparently
  • Supports transactions... and distributed transactions. (like Spring)
  • Has a framework to exchange graphs of objects with a remote client, objects can be manipulated freely on the client, filtered and queried without hitting the database without need, and are transparently loaded in to de client without having the n+1 problem. (like an hybrid between Hibernate, Apple's EOF & Carrierwave)
  • Supports "client only transactions" and nested client only transactions (like the Editing Context in WebObject's JavaClient applications) so that it is possible to make rollbacks without hitting the database, and it is even possible to make partial rollbacks... and have savepoint functionality, without going all the way to the database (unless you want to do so)
  • Client objects, server objects and database elements are kept in perfect sync automatically, but it is possible to add logic to a particular tier of the system without too much hassle.
  • Has a validation framework, that make it really easy to write efficient validation code following DRY, and that validates data on the client, on the application server and on the database.
  • Validation code, combined with the versioning capabilities of the infrastructure allows to save information partially, as easily as writing part of a paper, validating only as you completely the information, with multiple integrity levels
  • It is possible to disconnect the client from the server, and it will be able to save your changes until the connection is established again
  • The applications built with this perfect infrastructure auto update automatically.
  • With a very simple configuration tweak, it is possible to download the application "sliced" in pages, or as a complete bundle. This capability is so well integrated that the final user can choose the installation method, and the programmer doesn't even care about this feature.
  • The developer only needs to specify the requirements semi-formally in a language (like Amalgam) and he will receive a running application, that adapts dynamically to specification (unless he chooses to "freeze" a particular feature of the application, in which case, the default procedural code for that feature is automatically generated, and the developer can customize as he wishes ... or decide to un-freeze it.
  • Can be coded in any language compatible with a virtual machine that runs anywhere, or can be compiled to an specific platform.
  • Allows for easy report design... by the developer, or the user.
  • It is opensource (or sharedsource), so that in the extremely unlikely case of needing another feature, or finding a bug, it can be easily fixed by the developer
  • It is freely (as in beer) downloadable from the Internet. (or has a reasonable price)
  • It is fully documented, with lots of examples, going from very simple examples for beginners, to really complex real world applications with best practices for experts
  • Includes the source code with unit-test with 100% coverage of the code
  • Supports design by contract coding (from the database up to the client side).

You know what is the funny (or sad) part of all this? I have met frameworks that do 1, 2 or even 3 or more of this features... but none that does them all... will I ever see such a thing? is even possible to build it?

No comments:

Requirements Analysis: Negative Space

A while ago, I was part of a team working on a crucial project. We were confident, relying heavily on our detailed plans and clear-cut requi...