Introduction to the Object Oriented Design Trail
Designing object oriented systems using techniques like polymorphism, design patterns, inversion of control etc., isn't always as easy as the buzz in the media at times make it seem. As many developers have experienced, used wrongly the various techniques can turn your application into an unmaintainable monster. A monster that is better off being put down, than kept alive and tortured by the next developer to cross its path. I have come across a few of these monsters in my time as a developer.
Learning the OOP techniques is the easy part. Knowing when to use which technique is a lot harder. A situation emphasized by the explosion the last couple of years of design patterns, best practices, new tools and techniques like IoC containers, code generators, ORM's and AOP. It seems everybody has an opinion on how to do things best. I can't deny people their personal design preferences, but personally I believe that the best design for a system depends on what your design is trying to achieve. How well does the design meet it's goals? Perhaps a different, perhaps simpler design would get closer to the same goals? It is with these questions in mind that we should judge the design alternatives at hand.
This trail on object oriented design will try dig deeper into what you can do with OOD and why. For instance, where do the design patterns come from? Where do the refactoring techniques come from? Why should you use a certain design pattern? Why should you refactor? What can you do with Inversion of Control? It is questions like these this trail is concerned about.