Architecture Patterns and Design Patterns

Architecture Pattern – It expresses a fundamental structural organization or schema for software systems. It provides a set of predefined subsystems, specifies their responsibilities, and includes rules and guidelines for organizing the relationships between them.

Examples : Architectural framewoks like Zachman, ( ZIFA ) provide the user with a pattern for the designing the enterprise. The OpenGroup also discusses more on this.

This article details the various attributes of a system, and where does software architecture fit it.

Design Pattern – It provides a scheme for refining the subsystems or components of a software system, or the relationships between them. It describes a commonly recurring structure of communicating components that solves a general design problem within a particular context.

Examples : Adapter, Fascade, Singleton, Proxy to name a few.The book on Design Patterns by GOF, provides an exahustive list of design patterns. The Hillside site also has various patterns. With the dynamic change in software its becoming increasingly large to create new patterns, like the one Yahoo has. The TRIZ journal entry also correlates how to use design patterns along with software engineering.

Idiom – It is a low-level pattern specific to a programming language. An idiom describes how to implement particular aspects of components or the relationships between them using the features of the given language.

Example : Idioms generally relate to a particular programming language. Curiously Recurring Template Pattern is considered an idiom in C++.

Other interesting articles on Idioms can be found below:
a) Idioms and Patterns in Architectural Literature.
b) C++ Idioms – Coplien .
c) C++ Idioms .
d) More C++ Idioms .

Surface Computing and Retail turns out to be real

Microsoft Surface table in an AT&T store

Echoing on one of my last posts , I had mentioned that Surface computing has a lot to do with the retail industry .

I had given an example about a cafe shop using surface computing and SaaS, but also mentioned that it can be extended to the retail sectors, eg the hotel industry .

So the next time you check into a hotel , you don’t have to wait for someone to guide you through – may it be the hotel itself, or flip through the menu cards . Software can take care of that – in fact surface computing finds one of its market in there.

Sheraton and Microsoft has just done that – Microsoft Surface at play in Sheraton – taking away the pain of the long cues and other stuff .

Somehow , whatever I am thinking or putting into my blog post is coming out real in some way or the other.

Let me see when people in India shall realize the potential of surface computing. The economy has gone north and this is one of the best time to show case the potential to the clients and get some business.

Related articles

Predictive Analytics and healthcare

There have been various incidents in my family, which has resulted in various forms of medical ailment .

For example, my uncle who was doing pretty fine, did a routine heart check up and found out that 85% of one artery was blocked . He went on for a block removal .

Problem Statement
So the next time I go to a doctor, he can not only tell me about the present scenario , he can also predict what can be the suggested outcome … well they normally do, based on experience .. the more experienced he is the better option he can give ; so the keyword here is experience .

Earlier we visited the ophthalmologist for spectacles, and he would do a manual testing to give the correct lens. But now it has been replaced by computers , and no matter how less experienced is he the computer gives the correct lens , and the doc does some fine tuning on top of that .

Predictive Analysis/Analytics and Software Architecture
As business develops for the better and health care options get expensive, can’t we embed business intelligence ( BI ) into our daily lives.

So the above can be replaced with a more general option; say a computerized prediction… a option from which everyone can benefit .

Building this BI requires knowledge / experience on data mining built on that particular domain. This sort of BI has come to be known as predictive analysis.

A health care system, developed keeping predictive analysis in mind can go a long way in helping the common man in his/her daily life .

More details on predictive analysis/predictive analytics can be found here .

Related articles

Enterprise Architecture + Web 2.0 – New Kid On The Block

As cloud computing hovers over Web 2.0 ushering a new computing architecture, and people getting crazy over Amazon’s EC2 and S3 architecture – so is it all Web 2.0 all the way.

Being from a enterprise apps background, Web 2.0 was not that interesting to me. But lately after playing with some Web 2.0 apps, I find them incredible. It really brings fresh air – something which was really needed .

For those who have worked with Web 2.0 , AJAX is a very familiar term. Now AJAX with JSON support makes the stuff even more richer …. and the web is directed towards that .

So what shall happen to enterprise architecture (EA) … is it dead . Does that mean there shall be no more EA ; well if you thought yes, let me give you mint fresh news – enterprise architecture is coming back in a collaborative environment with Web 2.0 .

Architects from all over the world have put the integration of EA + Web 2.0 in their top priority list. Collaboration has been there for some time, but real time collaboration is still missing in the present online workspace.

Enterprise mashups are one way of integrating Web 2.0 mashups with enterprise architecture.

I would like some comments on this .

Surface Computing and the retail industry

As IT firms look bullish towards the retail industry , by finding various means of transforming IT into business using SaaS and S+S , surface computing breathes in a fresh era.

Microsoft has already released Microsoft Surface along with AT&T in the USA and Microsoft Research is trying out with the “PlayAnyWhere” model ; I think surface computing still has a long way to go ,primarily because of the price.. one licence cost $10K. So to get surface computing down to the masses, virtualization is the key. I read on the web that Microsoft has done some H-Virtualization with Microsoft Surface …. No idea on that .

MS has been looking into application virtualization for some time, and if Micrsoft Surface gets virtualized , then retail industry, hotels , casinos are all game for IT .

My earlier post on surface computing can be found here . Articles on surface computing and S+S can be found here.

Ideas from a software architecture convention

This Saturday, I had attended a software architecture convention in Bangalore. Even though the discussion topic was on digital collaboration in Microsoft Office Sharepoint Server 2007 (MOSS) there was a case study and problem solving which I liked the most .

There are some good features in MOSS – nice because they are integrated
1) Document Collaboration – document management system ( like Interwoven,Filenet,Doucmentum )
2) Collaboration Workspace
3) One can link MOSS to Office Communication Server for free VOIP calls
4) Online presence for users to communicate
5) There are plugins inbuilt which can take data from ERP systems, like SAP,Siebel etc and display in various formats.

How about a enterprise mashup doing all the needful stuff ; I think that would be a better way for the long run. In order to reflect any change ( e.g change in email notification ) , in the above case the module/s having notification addresses needs to be updated.

In a mashup, you just change the mashup handling notification messages with the new address .. wont that be much more better.

If you are new to mashups, please read it here. Sadly enough MOSS 2007 does not have any place for mashups.

Why should you use design patterns

Every time when we are working on a software , we come across problems, think about it and then implement the solution .

Design patterns are very effective in this context as it provides us with a tested solution; we just need to work around it .

A simple example would be a database application – which also has a GUI front end .

Normal Approach

1) Create a class which shall encapsulate the database table ( e.g a RecordSet class )
2) Use the recordset class object to tie up the data with your GUI
3) Test the application and deliver it to the client .

You have done an excellent job – the application is up and running and the client is much happy as much you are.

Situation after three years ( the tool has become very popular )

1) The client needs to increase the number of columns in the existing table ; he might need some more .
2) He gets back to you, and you tell him that it can very well be done.
3) Remember the earlier recordset class wont work here as the contents of the table has changed.
4) You create a new recordset class, tied up with the new table/s and become successful again.

The client again praises you for the newly done job, and you get a fat hike .

Revisiting the application using patterns

You could have used the adapter pattern ; and the code would had been much neater .

By using this pattern, you would have written some extra code, but it would have been beneficial in the long run .

Instead of a single recordset class, you could have had three classes – provider, broker, consumer. The responsibilites of each class are discussed below .

Provider class would have connected to the database table
Broker class would have done the intermediated job of handling the tables, stored procedures.
Consumer class would have fetched the contents from the broker and displayed in the UI .

So if the table changes at any point of time, you can modify the above classes accordingly and make yourself and your client more happy.

Design patterns, Antipatterns and Refactoring – Useful Site

Today I found a good site on design patterns, anti patterns and refactoring.

Has some good stuff … need to check it out more.

S+S and SaaS – A Brief Comparison

Though the architecture S+S and SaaS , sound very similar , there are several differences .

For the common people
SaaS – Software which completely based on the web
S+S – Collaboration of desktop software ( offline ) and services ( maybe
web or other wireless services )

Technical
SaaS – Mostly revolves around the REST API.
S+S – Not entirely built around the REST API, though thin clients may access REST to make use of the services.

An example of transition from SaaS to S+S can be found here.