moonz
moonz

Reputation: 55

NHibernate Architecture and Business Logic

Just started developing a project using NHibernate and Fluent NHibernate for the mapping and I'm confused. Since the project is going to get more complex over the next months I would like to structure the code into logical layers such as Persistence Layer and Business Logic layer.

I have a business object called Patient that contains logic and validation.

  1. Should Patient class be mapped with the Fluent NHibernate mapping class?
  2. Or should the mapping class map to some Data Access Object, such as PatientDAO and Patient class somehow use PatientDAO?

If 1, isn't my Business logic layer and persistence layer the same? If 2, having the two layer is separate projects, should I the BL project contain the Patient object and some IPatientDAO and the PL have the PatientDAO object?

Or am I doing it all wrong? :-)

Upvotes: 3

Views: 1310

Answers (1)

ckramer
ckramer

Reputation: 9443

You should map your entities using Fluent NHibernate, since that is where you map to/from your database structure to your object model.

As for DAO, this is a matter of personal taste. Generally folks like to use a DAO of some sort (even though folks like to call them Repositories these days). These classes will utilize the NHibernate ISession to read/write the data to and from the database. Generally the current means of working with these is to define a generic interface with Get<T>(int id), GetAll<T>(), 'Delete()type methods defined to handle CRUD ops, withT` being the entity type.

It is, however, also possible to use the ISession directly in your presentation code, since it is already providing an abstraction for reading/writing data. If you go this route then you are exposing NHibernate to the rest of your app, but your also removing one level of abstraction.

As for which layer is which, NHibernate is 95%-100% of your persistence layer. You can add some abstractions of your own on top of it to create an API that makes you happy, but that is totally up to you.

Upvotes: 3

Related Questions