## 2.1 Introduction

The Kiwi framework is based loosely on two important concepts.

1. The first concept is Model-View-Controller (MVC), which is an architecture developed for Smalltalk and that has been discussed and reused many times before (there are some references at the end of the text if you are curious about it). I have done some study of MVC1 and MVC implementations in modern frameworks (Swing and MFC both implement MVC in their own ways), and Kiwi provides traditional Views and Controllers (V and C) as well as Delegates, which are combined Views and Controllers (using the same name as under Swing).

2. The second concept is the Proxy, which borrows somewhat from Allen Holub's `visual proxy' concept described in his series Building user interfaces for object-oriented systems. Allen's views are quite original and gave a lot of insight into what coupling really meant for graphical interfaces.

   The visual proxy is an object that represents a model, or a certain part of it. It is coupled to the model it represents, which isn't absurd taking into account that it is simply a way to view and change it. In Kiwi you use Proxies in combination with Delegates (or separate Views and Controllers) to build forms for applications.

#### Footnotes

... MVC1
  While MVC is both interesting and commonplace, I criticize it as a generic solution to an application-level framework because it tends to promote highly-coupled classes (it does work quite nicely as a widget-level framework, having said that). Of course, this doesn't mean it's not useful to many applications (or at least parts of them).