Recently I've been researching software development frameworks in an attempt to maximize the consistency, maintainability, reusability, and performance of my software while minimizing the repetitive boilerplate development tasks that can plague enterprise development. For the .NET Framework platform, I've been focusing on Castle Project, Spring.NET, Enterprise Library, and CSLA.
Castle Project
The Castle Project is perhaps best known for its Rails-inspired MVC framework, MonoRail. That being said, it has grown to include a full feature set of components useful at all levels of development. The Castle Project appears to be a popular and well-tested choice.
Spring.NET
Spring.NET is a reimplementation of Java's Spring Framework for .NET. It seems to be most strongly suited for full-stack development of web applications and while it may not yet have all the features of the Java version it has a very impressive feature set. This .NET version is relatively new but is quickly gaining notoriety.
Enterprise Library
Enterprise Library is a set of integrated libraries produced by the Microsoft Patterns and Practices team. It covers many areas helpful in the development of backend enterprise systems, but is not quite as featureful for full-stack development as the above projects. This would be a good choice for creating robust base class libraries while sticking with standard Windows Forms or Web Forms development for the UI.
CSLA
CSLA was created by Rockford Lhotka, author of several books on programming enterprise business objects starting with VB6 and continuing through .NET. It is strongly focused on the business object layer and for that reason may not have quite the feature list of the others but is very mature, refined, and well tested. Unless you absolutely require some features not found here, this is one to strongly consider.
Comparison Chart
I've created a chart that shows a feature summary based on my research so far. Please keep in mind that I am not yet an expert in any of these technologies so there may be some errors or omissions. I would very much appreciate any comments that would help to improve the accuracy or completeness of this chart.
| | Castle Project | Spring.NET | Enterprise Library | CSLA |
| Dependency Injection | yes | yes | yes | |
| Object-Relational Mapping | yes | yes | | yes |
| Transaction Services | yes | yes | yes | yes |
| Logging Services | yes | yes | yes | |
| ASP.NET Web Framework | yes | yes | | |
| Component Caching | yes | yes | yes | |
| Component Remoting | | yes | | yes |
Conclusion
Any of these frameworks seem to be capable of satisfying the requirements I listed at the beginning of this post and like many technologies the best choice will differ depending on the specifics of the project. I'm looking forward to selecting one or more to explore further and put to use on future projects. I'll keep you posted!