Last week, I have been through a training at Microsoft campus on Design Patterns and Advanced Design Principles. It was a four day session, where in we learnt some good design principles and practised few patterns. It was a very wonderful session, as the sessions were very interactive and the instructor was very good at the subject. The interesting learning from this session for me is that one should focus on Design principles and Design patterns follows by itself. And our session were also more focused on principles than patterns (though there were good numbers of patterns covered with real world applications)
I wouldn’t be talking about the complete sessions here but would summarize the learning into points. If you are interested in learning more, I encourage you to read more on the web for each topic.
1. Head First Design Patterns:
2. Gang of Four’s Design Patterns Book
Pointers for Good Design:
1. Define abstractions from a given requirement
2. Design from client code perspective. Validate your design by writing code.
3. Understanding of Is-A and Has-A relationships
4. Focus on Design Principles
5. Separation of concerns
6. OCP – Open Close Principle [A class should be open for extension, but closed for modification]
7. SRP – Single Responsibility Principle
8. ISP – Interface Segregation Principle
9. LSP – Liskov Substitution Principle
10. Program to an interface and not to an implementation
11. Prefer Has-A over Is-A
12. High Cohesion and Loose coupling is desired
13. Avoid Conditional delegation
14. Avoid Redundancy in Design
15. Avoid class proliferation
16. Decouple an abstraction from Implementation
Keep these principles in mind while designing. Practise few Patterns.