Data Access

Data Access is an Object-Relational Mapping (ORM) library. As such, it owes a lot to the experience of NourY Solutions in the field of data management. But our ability to structure this experience and put it into words has been greatly enhanced by the remarkable work of Martin Fowler. Many concepts in use in this library are described in his book Patterns of Enterprise Application Architecture.

There are many .NET ORM libraries out there. But we don't believe "one size fits all" applies when it comes to ORM ; the mismatch between the object world and the relational one is so huge that it can only be solved by specific solutions under specific sets of constraints. Data Access has been designed with these constraints in mind :
  • Data Rules integration.
  • easy serialization of business object instances (XML for use in Web Services, JSON for Ajax applications...).
  • persistence backend abstraction : business objects should easily be persisted against any database backend, like a standard RDBMS solution (Sql Server, Oracle, SQLite...), or a web service, or even a flat file.
  • keep the developer in control ; for instance, no on-the-fly SQL generation by default (this could be added later).
  • easy code generation (we want to build a Software Factory, after all !).

This library is organized around 4 interfaces :
  • IDomainModel : is implemented by a Domain Model. There is also an abstract class (DomainModel) that can be used as a base implementation for your business objects. It provides Data Rules implementation, serialization, and UI integration (through the implementation of the standard IDataErrorInfo, IEditableObject and INotifyPropertyChanged interfaces).
  • IDataMapper : is implemented by a Data Mapper, which basically provides the persistence backend abstraction. The library provides base implementation for persistence based on standard ADO .NET, Enterprise Library Data Access Application Block or Web Services.
  • IDataTransferObject : this interface is implemented by a Data Transfer Object. It is used to hold the data of a Domain Model, to transfer it between a Domain Model and a Data Mapper and to serialize our Domain Models.
  • IPrimaryKey : is implemented by custom Identity Fields types.

Last edited Oct 22, 2009 at 9:14 AM by cartoixa, version 2


No comments yet.