Following is a collection of some principles\suggestions\rules\guidelines- whatever you wish to call them- to be kept in mind while designing software.
Some of this was inspired by Head-First Design patterns book- which I concluded recently. An excellent read- BTW.
I would recommend every earnest programmer to keep these principles posted at a visible location in his/her work place.
A) The Single Responsibility Principle - A class should have only one reason to change.
B) Open Closed Principle - Classes should be open for design but closed for modification .
C) Liskov substitution principle
D) Interface Segregation Principle - The dependency of one class to another one should depend on the smallest possible interface.
E) Dependency Inversion Principle - High level modules should not depend upon low level modules. Both should depend upon abstractions.
F) Encapsulate what varies
G) Favor composition over inheritance
H) Program to interface ,not implementations
I) Strive for loosely coupled designs between objects that interact
J) Depend upon abstraction, do not depend upon concrete classes
K) Principle of least knowledge - Only talk to your friends
L) Inversion of control- Don’t call us, we’ll call you.
M) Tell, Don’t Ask






December 22nd, 2008 at 6:00 pm
Very impressive your blog !!!
I think another great book that you should check is:
http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1229986779&sr=8-1
I think it should be a recommended read in every company.