Design patterns and principles

Software design is a critical step in the software development process. It usually takes the output of requirement analysis as input and generates a set of documented specifications or prototypes, based on which software developers can write the source code. It includes specifications on all levels of the software structure, ranging from low-level data structures and algorithms to abstract architectural view.

To propose you the best software design, Codeflow will use well-known concepts and patterns :

  • Object-Oriented Programming (OOP)
  • Model-View-Controller (web)
  • Model-View-Presenter (web, winforms)
  • Model-View-ViewModel (Silverlight, WPF)
  • Ajax (web)
  • Inversion of control
  • Dependency Injection
  • Interface segregation
  • Repository
  • Active record
  • Factory, Singleton, Decorator, State, ...

A software design relies also on some principles that garantee maintainability, modularity and extensibility (S.O.L.I.D.):

  • Single Responsibility Principle
  • Open Closed Principle
  • Liskov Substitution Principle
  • Interface Segregation Principle
  • Dependency Inversion Principle
  • K.I.S.S. : keep it simple and stupid
  • Y.A.G.N.I. : You ain't gonna need it

In the design phase, we already know that your software is going to change in the future. The application design must be flexible and modular to last many years, by resolving efficiently your quickly-evolving business needs.