Rare (or foolish) is the ASP.NET project which starts with a blank solution. Last summer, when blogging about my Damascine conversion to the world of ORM, I mentioned that we had made use of an NHibernate Best Practices article by Billy McCafferty as a starting point for an enjoyable and successful project.
Well, since then Billy and others have been working on a new project, S#arp Architecture, which they describe thusly:
Pronounced "Sharp Architecture," this is a solid architectural foundation for rapidly building maintainable web applications leveraging the ASP.NET MVC framework with NHibernate. The primary advantage to be sought in using any architectural framework is to decrease the code one has to write while increasing the quality of the end product. A framework should enable developers to spend little time on infrastructure details while allowing them to focus their attentions on the domain and user experience. Accordingly, S#arp Architecture adheres to the following key principles:
- Focused on Domain Driven Design
- Loosely Coupled
- Preconfigured Infrastructure
- Open Ended Presentation
The overall goal of this is to allow developers to worry less about application "plumbing" and to spend most of their time on adding value for the client by focusing on the business logic and developing a rich user experience.
I’ve been following the development progress by lurking on the associated Google Group, and I have to say I’m super-excited by the what I see. A lot of improvements have been made to the architecture in recent months, and it has really gelled into an impressive foundation that promotes high quality software and zero-friction development.
The patterns and algorithms included represent industry-accepted best practices, and it makes use of several best-of-breed open-source projects, including:
- Fluent NHibernate
- NHibernate Validator
- Castle Windsor
- Apache log4net
- Rhino Mocks
If I were kicking off a new ASP.NET project today, I would certainly consider using S#arp Architecture as a starting point. Even if you’re not, it’s a great example of how to structure an enterprise web application and well worth taking a look at.