Software applications are typically composed of a User Interface (UI), code to process input from a user or another system and a database that acts as the persistence mechanism. Python applications could incorporate the UI, the business logic and the data access into a single file. For very simple applications this might make sense. However, as the complexity of the domain rises there is a need to divide code intro separate files within many directories and create separate code packages. The aim of this high level code organization is separation of concerns.

The term architecture was adopted from the science of creating buildings and other physical structures [Perry1992]. Buschmann et al presented eight architectural patterns to express structural organization schemas in software systems [Buschmann1996]. One of them, the Layers Architecture enjoyed great popularity in enterprise, desktop and web applications. The Layers Architecture focuses in decomposing the application functionality into vertically stacked layers in which each layer specializes in a particular group of responsibilities [Buschmann1996]. In its strict form layers are coupled only to the layers directly below and in its relaxed form any higher level layer is permitted to couple to any lower level layer [Vernon2013].

Read more…

Domain Driven Design in Python

Domain-Driven Design (DDD) is an approach to drive complex software projects using a set of principles, software design practices and techniques by directly aligning the code with the concepts in the domain [Evans2003]. The concept was established by Eric Evans in his book “Domain-Driven Design, tackling complexity in the heart of software”. Vaughn Vernon notes that Evans' book “is essentially a large pattern language” [Vernon2013].

The basic set of object-oriented Design Patterns became popular by the "Gang of Four" [Gamma1995]. Thereafter, in the context of enterprise applications, Martin Fowler [Fowler2002] presented a set of higher level patterns usually applied in enterprise application development. Eric Evans takes the concept further by placing the Domain Model in the heart of enterprise applications and presenting a set of strategic and tactical software design patterns tied together by a Ubiquitous Language.

Read more…