Architectural Principles

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.