Methods and apparatus, including computer program products, implement
techniques for structuring applications into reusable components. A
reusable software component is implemented. The component encapsulates
functionality, where multiple instances of the component are usable at
the same time. The component has at least one visual representation. The
component has a programming interface for programmatic interaction with
the component, a data-binding interface for data communication with the
component, and a visual interface to access the at least one visual
representation of the component.