Wednesday, May 7, 2008

software design ecosystem

Thanks to Sean Corfield for his excellent breakdown and discussion of this topic. I would like to internalize these concepts more by writing about them in my own words.

I like the ecosystem analogy that shows the relationship of the parts of a software system or application. The ecosystem has discrete parts that function independently from the system, but also contribute to the overall health of the entire system. Each role plays its part and contributes to the general health of the application.

In the software ecosystem, there are parts such as a database (persistence layer), the model(data layer), with its data access objects like DAOs and Gateways and their services, the controller (road map to the application and manages requests and directs program flow) and the presentation layer (view files or GUIs).

Specifically - the controller has registrations or pointers to the presentation files and to the listeners that then point into the model layer. The listeners speak to the model layer via a service layer. The service layer is not really part of the application aside from being registered in the controller. The service layer should be application agnostic (like Sgt Shultz of Hogens Heroes fame - "i know nothing"). If the service layer only worries about the data layer beneath it, and not about maintaining state for the application, it is much more reusable to other applications and follows design best practices by modeling loose coupling.

This tiered ecosystem promotes individual health in each discrete part but also promotes the overall health of the system. Healthy organs = healthy body.

No comments: