Basic design principles.

Once you understand the requirement, how to propose high level architectural draft is the main question. There are some basic design principles, we can follow and come up with high level draft. 


1. Draw the boundary. 
You have to have a clear idea about what is in your application's scope and what is not, it is defined by client in the requirements. So draw the boundary and list out all internal and external sub -systems (who will give input to application and how, what all other external sub systems exist). That boundary will define the scope of the application.

Boundary of the system is very important part of scope defining, it gives an idea what is there in designer's hand and what is external. Designer should not worry about anything which is external and not in his control while defining the system and its scope. 


There is saying, focus more on what your system is not supposed to do, and don't implement that, make a release note and specify what it is not supposed to do, and then you can fully focus on what it supposed to do.

Before proceeding further let me tell you what is the system
It is made of two things -
a. Components/modules.
b. inner connections/(How some component will talk to each other).



You can also think of any software solution as a system which has many modules and how that modules interact to each other.

2. Design system as block box -
   
Only public behavior of the system should be shown to the outer world. All internal logic should be hidden from the client/user (or say an encapsulated system). To know more about black box system click here.

3. Think about different actors or users of the system, like normal user, admin, privileged user, manager, accountant, etc..

4. Components/modules should not interact with each other -

If you think about a very small application, where we have only 2 to 4 functionalities then this rule not applicable. As soon as your application becomes middle sized to a large enterprise solution/application you should follow this rule, otherwise code will become unmanageable and maintenance of the project will be very costly. There are so many pattern that fits into different places, on how module should interact with each other like - front controller architectural patternmediator design pattern, command design pattern etc.

There are many concepts for designing high level design draft, I will add them periodically soon....



Thanks for reading it. To read more on design patterns and basic design principles please see my web page. You can also join me on FB or on G++. Please drop comments for any question related to this blog.

Comments

Popular posts from this blog

Non-virtual interface idiom (NVI)

Architectural patterns => Mud to structure => layers.

Architectural style -> Adoptable system -> Reflection.