Common Design Principles are:
Separation of Concerns: software should be separated based on the kinds of work it performs. Separation of concerns is a key consideration behind the use of layers in application architectures.
Encapsulation: to insulate them from other parts of the application. Encapsulation is achieved by limiting outside access to the class's internal state.
Dependency inversion: The direction of dependency within the application should be in the direction of abstraction, not implementation details
Single responsibility: Objects should have only one responsibility and that they should have only one reason to change
Don't repeat yourself (DRY): Avoid duplication.
Persistence ignorance (PI): Persistence ignorance (PI) refers to types that need to be persisted, but whose code is unaffected by the choice of persistence technology.
Bounded contexts: Breaking large application into separate conceptual modules. Each conceptual module then represents a context which is separated from other contexts (hence, bounded), and can evolve independently. Bounded contexts are a central pattern in Domain-Driven Design.