Naked Objects
By Richard Pawson and Robert Matthews

A critical look at object-orientation

Defining a new approach

If we are going to encourage the design of business systems from behaviourally-complete objects, then we need to overcome a number of forces that discourage people from doing proper object modelling, and/or that tend to separate procedure and data even in so-called object-oriented designs. Overcoming these forces will require new tools and techniques, and these must demonstrate that they do not re-expose us to risks or problems that the established tools and techniques were designed to overcome. Specifically:

  • Instead of envisaging the role of business systems solely as a means of executing a deterministic process, transforming input information into output information through a sequence of value-added steps, we need to find alternative metaphors. One such metaphor is the value shop, where the user constructs a solution to an individual problem. (It is a lot easier to add optimized scripts to a value shop model where necessary than it is to add problem solving to a value chain model.)
  • Instead of pursuing optimal efficiency in the execution of each of a finite set of scripted tasks, design a form of user interaction that maximizes the overall effectiveness of the users in fulfilling their broader responsibilities. This means giving the users more control, for example over the order in which capabilities are invoked in order to achieve a goal. We should also design systems that allow users to become more expert as they learn, rather than constraining everyone to the lowest common denominator.
  • Instead of capturing the requirements for a system as a set of use-cases and then using these to identify the shared objects and their responsibilities, aim to identify the objects and their responsibilities directly, in conversation with the users and other stakeholders. We also need some means of capturing the emerging object model in a concrete form that the users can identify with and gain value from.
  • Instead of allowing the business logic to become scattered across Model, View and Controller objects, find a way to make the View and Controller roles generic, so that the developer writes only the Model objects and all user interaction is derived from this automatically.
  • Instead of allowing the architecture of our systems to become dominated by the idea of being able to buy it piecemeal from different suppliers, recognize that real agility demands a homogeneous business object model that cannot be purchased, but has to be designed in-house to reflect true business needs.