View Driven Development
In the world of VMware, “view” is an overloaded term which is used in desktop, vSphere APIs, and PowerCLI. Outside VMware, you can also find it in MVC architecture, which basically divides a software system into model, view, and controller. This separation has become a basic programming paradigm in modern software design and development.
This article is not about how to design a view or extract a view from a software system. Rather it focuses on the software development methodology. You may have heard other methodologies like test driven development (TDD), which suggests you develop unit tests before you write production code. I personally don’t think that is a realistic approach for most people.
More realistic is View Driven Development. Before getting into the detailed discussion, let’s define the term “view.” You can take it as a graphical user interface (GUI) as suggested in MVC, but it’s definitely more than that.
Generally speaking, a view is whatever exposed to any external entities, including to people as GUI or command line interface (CLI), to other computer systems as network services, to other applications as shared libraries, to file systems as import or export format, etc. One system could have more than one view at a time, just like multiple views in MVC architecture.
The basic idea behind VDD is that any code of your system got to be “visible” directly or indirectly from external; otherwise, it doesn’t belong to the system and you should delete it. Once you define the views of a system, the feature requirement of the system is finalized. From there, you just design and implement whatever code that supports these views. Views are definitely not enough.
Part of the following development is therefore to design the model, which is the core of a system and an important work in the project. With the defined views, you can easily scope the model – just include these interesting elements and remove others that are never “seen” by any views.
This view drive development is a methodology inspired by the MVC but is not its replacement. VDD suggests how a software project should be approached while the MVC suggests how the software should be structured. They share the same philosophy therefore complements each other.