Design Smell - The Odors of Rotting Software
1.Rigidity - THe system is hard to change because every change forces many other changes to other parts of the system.
2.Fragility - Changes cause the system to break in places that have no conceptual relationship to the part that was changed.
3.Immobility - It is hard to disentangle the system into components that can be reused in other system.
4.Viscosity - Doing things right is harder than doing things wrong.
5.Needless Complexity - The design contains infrastructure that adds no direct benefit.
6.Needless Repetition - The design contains repeating structures that could be unified under a single abstract.
7.Opacity - It is hard to read and understand.It does not express its intent well
Princples of object-oriented design that help developers eliminate design smells and build the best designs for the current set of features
SRP - The Single Responsibility Principle
OCP - The Open-Closed Principle
LSP - The Liskov Substitution Principle
DIP - The Dependency Inversion Principle
ISP - The Interface Segregation Principle
SRP: A class should have only one reason to change.
OCP: Software entities(classes,modules,functions,ect.)should be open for extension,but closed for modification.
LSP: Subtypes must be substitutable for their base types.
DIP: High-level modules should not depend on low-level modules.Both should depend on abstractoins;Abstractions should not depend on details.Details should depend on abstractions.
ISP: Classes have "fat" interface can be broken into groups of methods by,each group serves a different set of clients;clients should not know about them as a single class.
refer to the <<Agile Software Development>> -- Martin