SIDA: Moving Object-Oriented Design beyond Model-View-Controller
September 16, 2011 § 2 Comments
[Update: this post has been obsoleted by RIBS: Marrying the REST and MVC Design Patterns « iHack, therefore iBlog]
SIDA stands for “State • Interface • Data • Algorithm“, and is a refinement of my earlier “DIDA” model (where the “D” stood for Design). DIDA in turn was an expansion of the well-known Model–View–Controller design pattern based on insights from the Data-Context-Interactions architecture.
- Concrete States
- Clear Interfaces
- Consistent Data
- Concise Algorithms
- Presentation of Views
- Controlling of Actions
- Binding of Roles
as shown in the accompanying diagram.
In a simple system, the state is implicit and the relations are absorbed into one of the artifacts, reducing SIDA to the traditional View, Model, and Controller, respectively. For more complex systems, however, it may make sense to design explicit objects for each relation, e.g., traits for roles, presenters for views, and strategies for actions.
In addition, SIDA is intended as a general architecture, describing the internal structure of everything from databases to web services to GUI applications. An interface as defined from inside the system may appear as data or an algorithm from outside the system.
The most interesting (and perhaps unusual) aspect of this diagram is how it makes state a central features, something developers never use. If state really is so central to the design process, perhaps it deserves explicit language support, as provided by UnrealScript or typestates (as in Rust).
This is all still merely a hypothesis on my part, as I haven’t actually put any of this into practice yet. Anyone with more experience care to comment?