I’ve explored and started/continued using a lot of stuff on my new project. A coworker of mine started me out on Inversion of Control and ORM tools and it’s gotten more awesome from there. Here is a concise list:
- Inversion of Control & Dependency Injection: Castle Windsor. I switched from StructureMap. Everything is handled through interfaces and is decoupled. I can mock anything in unit tests.
- ORM: NHibernate with Fluent NHibernate auto mappings installed with this NHibernate Facility. I don’t write SQL, HQL, etc. I just use Linq to get what I want unless it has to be optimized.
- Database: SQLite with Linq provider. Very easy to get a database up and running.
- Automatic Transaction Scoping: Castle AutoTx Facility. No more boilerplate transaction code.
- GUI: Windows Presentation Foundation implementing the Model-View-ViewModel pattern. You have to be strict to do it right but when you do it makes things a lot easier. My code-behind rarely has code, everything is in the Xaml.
- Commanding: Routed Commands. Bind commands to buttons, etc. and everything is handled for you.
- Easy Parallelism: Task Parallel Library. I’m getting used to chaining long running things with Tasks. Exceptions and return values are handled the right way. I started looking at Reactive Extensions to query events and Observables.
- Dependency Management: NuGet. No more lib folder or dlls in your repository. We now host our own feed so we can share code and manage dependencies.
- Installer Framework: Windows Installer Xml. It has a steep learning curve but it’s the best tool out there to build installers. Started by Microsoft people then open-sourced.
- Logging: log4net. I will hurt you if you write your own logger.
- Object Mocking: Rhino Mocks. I can test just what I want keeping tests small and easy to maintain.
- Unit Testing: NUnit. Duh.
- Continuous Testing: NCrunch. It’s awesome to watch tests pass and fail in Visual Studio as you write code.
- Continuous Integration: Jenkins. It builds everything including the installer.
- Build Tool: NAnt with NAntContrib for WiX tasks. Always have a build process.
- Generate Fake Data: Faker, generates lorem epsum; good looking names, emails, etc. No more User1, User2, email@someaddress.org.
- Source Control: Git. It has a steep learning curve especially if you’re switching from a centralized tool like Subversion but it’s worth it.
- Configuration: Using Configuration Sections to organize settings and Configuration Property Attributes to set defaults, etc. Don’t repeat the name of the property, use ExtractPropertyName so you can refactor your configurations.
- Configuration Validation: Using Validation Attributes and writing Validators to validate hostnames, file paths to files that must exist, enums, etc. in configuration files.
- Storage: Isolated Storage. Nothing is stored alongside the application. Easy access without any permissions errors.
- Documentation: GhostDoc to help generate comments. I’m want to try SandCastle to generate documentation when I get time.
- Get more done in VS: ReSharper. I can’t code without it, seriously. It saves so much time and makes your code cleaner.
- Code Style: StyleCop with some of the rules relaxed.
Leave a comment