Current Project Technologies

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.
Tagged with:
Posted in .Net, Inversion of Control, Unit Testing, WiX, WPF

Leave a comment