Design Patterns and Advanced Design Principles

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.

Recommended readings:

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.