Here's the scenario:
- ASP.NET MVC2 Web Application
- Entity Framework 4 (Pure POCO's, Custom Data Context)
- Repository Pattern
- Unit of Work Pattern
- Dependency Injection
- Service Layer mediating Controller -> Repository
So basically, all the cool stuff. :)
Flow of events for a basic UI operation ("Adding a Post"):
- Controller calls Add(Post) method on service layer
- Service layer calls Add(T) on repository
- Repository calls AddObject(T) on custom data context
- Controller calls Commit() on Unit of Work
Now, i'm trying to work out where i can put my validation.
At this stage, i need two types of validation:
- Simple, independant POCO validation such as "post must have a title". This seems a natural fit for Data Annotations on the POCO's.
- Complex business validation, such as "cannot add a comment to a locked post". This can't be done by Data Annotations.
Now, i have been reading "Programming Entity Framework, Second Edition" by Julie Lerman (which is excellent BTW), and have been looking into hooking into the SavingChanges event in order to perform "last-minute" validation. This would be a nice way to ensure validation always happens whenever i do "something" (add, modify, delete), but it's also a little late IMO (as the items are already in the state manager) - so what can i do if validation fails, remove them?
I could of course make my POCO's implement an interface (say "IValidatable"), and call a method on this interface during this event.
But this seems "too late" for business validation - is this