Wednesday, September 2, 2009

Beautiful architecture - Making Memories

The system in this story, a photo storage, manipulation and processing system, was a bit strange to read about for me since so many of their architecture choices and considerations were so similar to the ones we made in an open-source application I co-wrote years ago during my undergrad. (The application was called Stopmotion and can now be found in both the Debian and Mandriva official repositories.)

However, this is not all that strange since this is really, as far as I can see, just a variant of the well known MVC architecture pattern. Their domain is the MVC model, their forms are controllers and their properties are the subjects in the observer relationship between the model and the view/presentation layer, which allows the model to indirectly and dynamically inform the presentation layer of changes and thus keep it in sync. In fact I find it strange that they can even describe all of this without even mentioning that pattern. Also, when reading the article I do wonder whether this system is a bit over-engineered and perhaps even an example of the second system effect (I wonder about the same thing with Stopmotion by the way). The Kiosks seemed fairly basic with the GUI operating in a screen-by-screen workflow, which limits the amount of interacting components on the screen at one time. However, I do believe it is better to err on the side of a bit too much infrastructure than the opposite and based on this story they do seem to have been successful at keeping entropy in check so that they could work efficiently. This impression is strengthened by the author's closing comment about remembering the different classes and their interaction fondly, which is one I share from my experience with Stopmotion.

One thing I would like to point out though is the usefulness of domain/application facades in implementing things like undo (or logging, etc.). These classes work as gateways to the domain/model which means they are ideal places to log commands or take snapshots of the model state so that these can later be run backwards/restored in order to undo an action. In our application we used a variant of the Command pattern to implement this functionality.

No comments:

Post a Comment