DavidSouther edited this page Oct 25, 2012 · 7 revisions

JEFRi: Entity Framework Runtime

JEFRi is an entity framework. Entity Frameworks allow developers to specify data descriptions and relationships once for their domain, then share data throughout their application space in a unified way. JEFRi accomplishes this by specifying an Entity Context independent of any programming language. This context describes the entities available in the domain model, the properties of those entities, the relationships between entities, and any additional attributes needed to make the model suitably robust. These navigation properties allow entities to act naturally and transparently as composite types.

JEFRi provides strong type enforcement on relational document storage. With a serialization format described in JSON, JEFRi concepts map directly to NoSQL document stores. Developers can use JEFRi as an entity framework for their application model backed with CouchDB's replication tools. Alternatively, JEFRi works as an object-relational mapper. Using an ORM persistence layer, JEFRi would allow applications to take advantage of the performance capabilities of MySQL.

An Entity Framework provides a wealth of functionality over a pure Object / Relational Mapper or Distributed Document Store. Straight ORMs simply translate between a database table and an instantiated object; Document stores have no type structure or relational enforcement. A full EF includes tracking modifications of entities, descriptive methods to navigate entity relationships, intelligent sharing between framework instances, and more. JEFRi is a specification for how to define these entities, how to share these entities, and many other features enabling software projects to quickly and efficiently work with their data.

Why JEFRi?

Using a single DAL streamlines development. JEFRi applications across the business use the same data. JEFRi-aware frameworks can provide extensive default functionality.


Rails and rails-like applications depend on scaffolding, auto-generated code that will be replaced later. Raw access to REST interfaces ties an application's data to a specific URI, reducing an application's flexibility. JEFRi encourages separation of the data layer from the rest of the application and allows frameworks to provide overridable, not replacable, code.


JEFRi defines a transaction specification and runtime API. The API and transaction endpoints can be implemented in any language, and the same consistent view of data shared among those applications.


At this time, the Javascript implementation can be considered the de-facto reference implementation, but the official spec is maintained on the JEFRi wiki.


Fork on github, of course! For an overview of getting a build environment set up (mostly git clone and npm install), check out the quickstart guide. The roadmap is a short-list of features to be added soon, and issues will be filled with actual in-the-works features and bugs.