- Object Relation Mappers (nHibernate using Fluent)
- Inversion of Control containers (AutoFac, ninject, Structure Map, Windsor, MEF ???)
- Test Driven Development - This is about DESIGN NOT TESTS, and I need to make myself do this more. DON'T WRITE CODE WITHOUT TEST!!!
- SOLID Priciples (see Uncle Bob)
- Single Responsibility Principle - A class should have one, and only one, reason to change.
- Open Closed Principle - You should be able to extend a classes behavior, without modifying it.
- Liskov Substitution Principle - Derived classes must be substitutable for their base classes.
- Interface Segregation Principle - Make fine grained interfaces that are client specific.
- Dependency Inversion Principle - Depend on abstractions, not on concretions.
Okay, now I have the basics. Well enough of the basic to do little bit better...
I've been working with these tools and principle for a couple of months now and I have realised what a big difference this make. Not a little bit difference, but a HUGE difference.
You can change the whole structure of the system, and when you're finished all the tests still pass. I don't think this would have been possible before, or I was just to scared to try it.


