---
title: Naked Objects
category: Architectural
language: en
tag:
- Decoupling
- Extensibility
- Presentation
---

## Intent
The Naked Objects architectural pattern is well suited for rapid
prototyping. Using the pattern, you only need to write the domain objects,
everything else is autogenerated by the framework. This pattern enforces a strong domain-driven design principle as the generated UI directly reflects your domain objects and allows users to view as well as interact with them directly (hence the 'naked' part). This allows the users to become more of a problem-solver rather than a process-follower when using the UI.

## Explanation
 
**In plain words**

> Naked objects allows you to rapidly generate objected-oriented UI that allows users to perform tasks in ways that they want.
 
**Wikipedia says**
> Naked objects is an architectural pattern used in software engineering. It is defined by three principles:
> 
> 1. All business logic should be encapsulated onto the domain objects. This principle is not unique to naked objects; it is a strong commitment to encapsulation.
> 2. The user interface should be a direct representation of the domain objects, with all user actions consisting of creating, retrieving, or invoking methods on domain objects. This principle is not unique to naked objects: it is an interpretation of an object-oriented user interface.
>
> The naked object pattern's innovative feature arises by combining the 1st and 2nd principles into a 3rd principle:
> 3. The user interface shall be entirely automatically created from the definitions of the domain objects. This may be done using reflection or source code generation.

## Applicability
Use the Naked Objects pattern when

* You are prototyping and need fast development cycle
* An autogenerated user interface is good enough
* You want to automatically publish the domain as REST services

## Known uses 
> The Department of Social and Family Affairs in Ireland, responsible for social welfare payments, has successfully incorporated the naked objects pattern for re-designing their existing Child Benefit Administration system architecture. A case study evaluation of the project shows that users had positive responses to the increased flexibility of working with the new system and that it is easier now to respond to future changes.

## Quick start

Apache Isis is a Java framework that implements the naked objects pattern. Check out their [starter app](https://isis.apache.org/docs/2.0.0-M9/starters/simpleapp.html) to get started on building an application.

## Credits

* [Richard Pawson - Naked Objects](http://downloads.nakedobjects.net/resources/Pawson%20thesis.pdf)
* [Apache Isis - Introducing Apache Isis](https://isis.apache.org/versions/1.16.0/pages/downloadable-presentations/resources/downloadable-presentations/IntroducingApacheIsis-notes.pdf)


