The following type of code pattern indicates that software is badly written:
. Rigidity—Rigid software is software that requires a cascade of changes when you
make a change in one place.
. Fragility—Fragile software is software that breaks in multiple places when you
make a change.
. Needless complexity—Needlessly complex software is software that is overdesigned
to handle any possible change.
. Needless repetition—Needlessly repetitious software contains duplicate code.
. Opacity—Opaque software is difficult to understand.
Software design principles:
. SRP—Single Responsibility Principle
. OCP—Open Closed Principle
. LSP—Liskov Substitution Principle
. ISP—Interface Segregation Principle
. DIP—Dependency Inversion Principle
Robert and Micah Martin Agile Principles, Patterns, and Practices in C# on page 104