Architecture vs Design Pattern

I’ve decided to take a break from some lower level stuff – server side languages, scripts and front end stuff. As in “break” – I meant in my blog posts. My thirst for more Javascript and PHP is unending so that is still quite active.

I’ve developed a sudden interest in system architecture – I think this was ignited off a job requirement I’ve recently run across. Almost everything listed as a requirement I had covered and even the ones I wasn’t quite savvy with I knew I could pick up pretty fast – ie frameworks and libraries. When I look at job requirements, I look at the underlying fundamentals or lack thereof with regards to my toolbelt.

I like realistic job requirements – they poke holes in me that need my attention. To my surprise – there was one requirement, well not exactly a requirement but “a plus” that humbled me. This was the concept of “System Architecture”.

System Architecture. Yes I’ve covered this subject many times in the past, however this is something I should know, and know very well. Of my 15+ years as a software developer this is embarrassing. And so here I am, attempting to fill in the gaps. Because well, isn’t that what immersing yourself is all about?

System Architecture itself is so high level though, let’s get a bit more specific here since were talking about software. We are really talking about Software Architecture and Design.

So let’s get started with some concepts – Architectural vs Design, with an emphasis in architectural.

1. Architectural Pattern

– High level universal scope
– How components are organized and assembled

Architectural Pattern can be abstracted into two levels:

Level 1 – Monolithic, Level 2 – Layered

– Also known as the N-tier Pattern
– Monolithic
– Separation of concerns
– Layers as major components

Ex.Presentation, Business, Persistence, Infrastructure

The Design output is the input of the development phase.

The Architecture is the input of the development phase.

Software Architecture is how the defining components of a software system are organized and assembled (Architectural Patterns). How they communicate with each other (Messaging and API’s). And the constraints the whole system is ruled by (Quality Attributes).”

The architectural pattern define the granularity of the components. Knowing the architectural pattern will help us make good decisions in the development phase.

Level 1 – Service Based, Level 2 – Micro-Services

– Service-based type of pattern
– Independently evolvable and deployable units

Level 1 – Distributed, Level 2 – Event-Driven

– Distributed architecture
– Asynchronous nature
– Overall structure depends on topology chosen

2. Design Pattern

– Lower level scope – How components are built