In this article, I will like to discuss about two perspectives of Software Architecture that I learnt from my works and books;

The two perspectives are:

Macro Software Architecture: A high level view describing the overall system of the software service;

Micro Software Architecture: A lower level view describing the internal structure of a software;



Credit: satyricon86

Macro Software Architecture

Why we need

When we build a software or a service, we usually consist of many functions to fulfil different requirements;

Some of them are required by the end users. e.g A push notification will be received if my friend sent something;

Some of them are required by the Marketing colleagues. e.g how many Daily active users;

Some of them are for the availability. e.g Backup the data to another servers;

Therefore, it will be several different software systems or components to achieve different requirements; In order to help the team know clearly about how the software can built, it is a good idea to draw the macro architecture;

What should describe

The macro software architecture should tell the following information:

What are the entities (Software systems, Users, …) involved? What are the systems we should build ? What are the systems are provided by other developers?

How the entities connect to each others? Is it using http connection and in REST style? Is it using socket connection and with connection pool?



My Example

Triend – A social networking app built by my company:

In our app, it consists of several software parts:

Two mobile client (android and iPhone);

An application server

A database

File system storing the images sent by users

Push Notification Web service (provided by Parse)

Geocoding Web service (provided by Google)

Several Backup scripts

And are connected in different ways:

HTTP connection in REST style

Socket connection with connection pool

File I/O

Micro Software Architecture

Why we need

When we build a software system, we may encounter an issue that the requirements of the system is keep changing or adding; To deal with it, need design a micro software architecture that is change-friendly; Unlike the Macro Architecture, micro architecture focus how one system perform its functions which may be one of your product’s services; A good micro architecture also help us to resue code from one project to another;

What should describe

In order to make a good micro software architecture that can adapt change, you need think which part in the architecture are the core business logic and which part are common logic;

So the micro architecture should tell about:

The base architecture: The common logic that help building the business logic;

The components: The logic that serving the system requirements;

How can components plug in the base architecture; This is also called “Interface”;

The internal modules contained in the base architecture;

Metaphor

I would like to “a computer” as the metaphor of the micro software architecture; When opening a computer case, you will see different parts, the motherboard, cpu, memory, hard drive, etc, … ;

The motherboard is like the base architecture; There are lots of slots that fit different components; There are jumpers for configuration;

CPU, Memory, hard drive, etc are like components; They just do their own tasks, memory for storing data, CPU for calculation; They also need to have a proper interface to that let them plug into the motherboard;

My Example

Shooter – A cocos2d-x shooting game

In my game, the base architecture is the Cocos2d-x game engine; The engine help me on a lot of things such as render my object to the screen, user input handling, gui building blocks, scene transition;

And the components I built are:

My game objects – My spaceship and enemy monsters;

Game scenes – Title Screen, Game scenes, ..

Final Notes

When building a software, the knowledge of architecture is important for us no matter you are using it or making it; It can prevent us not eroding the software and can help us build new function in a more efficient way; Another note I like to mention is that Software architecture cannot be designed perfectly in the early stage, it should evolve or rebuild sometimes;

Useful Resources

Software Architecture and Design by Microsoft:

https://msdn.microsoft.com/en-us/library/ee658093.aspx

https://msdn.microsoft.com/en-us/library/ee658093.aspx Software Architecture mini-course in Udacity:

https://www.udacity.com/course/viewer#!/c-ud805/l-1777008537/m-634469271