A while ago I read the book on Naked Objects and was excited by the ideas. Writing only my core business logic and having the UI automatically generated? Sign me up!
Further, the potential goes beyond that. This can be a great tool in domain modeling. With the ability to directly invoke one's objects, one is encouraged to directly use one's domain objects, whereupon one can discover...
- Flaws
- Useful interaction patterns (for UI implementation, particularly pertinent if one holds the view that a UI is basically "scripting the domain objects")
- New features.
To this end, I'm interested in any systems similar to Naked Objects. I did some leg-work, such as searching for hits under strings like "Direct Manipulation UI", but haven't found anything useful.
Do you know of any work along similar lines? I'd prefer something in PHP or JavaScript and that doesn't assume I'm running a Linux box. I know of NakedPHP and Spiro (can't find documentation for that), but they're both basically Naked Object implementations for PHP and javascript, respectively.
Do you know of any other systems?
A while ago I read the book on Naked Objects and was excited by the ideas. Writing only my core business logic and having the UI automatically generated? Sign me up!
Further, the potential goes beyond that. This can be a great tool in domain modeling. With the ability to directly invoke one's objects, one is encouraged to directly use one's domain objects, whereupon one can discover...
- Flaws
- Useful interaction patterns (for UI implementation, particularly pertinent if one holds the view that a UI is basically "scripting the domain objects")
- New features.
To this end, I'm interested in any systems similar to Naked Objects. I did some leg-work, such as searching for hits under strings like "Direct Manipulation UI", but haven't found anything useful.
Do you know of any work along similar lines? I'd prefer something in PHP or JavaScript and that doesn't assume I'm running a Linux box. I know of NakedPHP and Spiro (can't find documentation for that), but they're both basically Naked Object implementations for PHP and javascript, respectively.
Do you know of any other systems?
Share Improve this question edited Feb 26, 2015 at 21:45 R. Barzell asked Feb 24, 2015 at 20:53 R. BarzellR. Barzell 6746 silver badges25 bronze badges 7- 1 Symfony 1.3+ and Propel (now no longer supported) used to generate forms based on database schemas plus sensible defaults. It used quite a plicated OO forms builder system. I wonder if Symfony 2.x and an ORM (I think Doctrine is now the default) does something similar? – halfer Commented Feb 24, 2015 at 20:57
- Not a bad angle, but what about something more tied to objects themselves? – R. Barzell Commented Feb 24, 2015 at 20:59
- Wouldn't it make more sense to tie UI to model objects? In most cases, UIs are just renderings of database tables/rows. If you want to do this explicitly from objects rather than models, then I don't know - just wanted to throw the Symfony suggestion in. – halfer Commented Feb 24, 2015 at 21:07
- I'd look at Symfony and Doctrine. I think it will get you where you need to go. – Halfstop Commented Feb 24, 2015 at 21:08
- @halfer tying the UI to models makes sense, but there's also a place for tying a UI to objects. For instance, what if I'm also implementing my models as objects? Or what if I'm trying to "execute" my object network as part of an analysis phase? Or what if I'm brainstorming UI ideas? What if I'm exploring emergent functional paths that arise due to object interactions, which I can then capture as an interaction script? The main thing here is I'm trying to find something lightweight, where I don't have to buy into a framework, paradigm or methodology. – R. Barzell Commented Feb 26, 2015 at 14:18
2 Answers
Reset to default 9As co-author of the Naked Objects book, I would like to add my view.
It is not unmon that people really like the concept of the naked objects pattern, but don't like the particular UI. You didn't say how long ago you looked at the implementation, or indeed, which one. The two main open source implementations (there are a few others, but less established) are:
- The Naked Objects Framework, for the .NET platform
- Apache Isis, for the Java platform
both of these have more than one UI. But, let's presume that you have looked at all the default UIs and are not happy with any of them. First, most people who use either framework in an enterprise setting end up customising the default UI quite a bit, whether using just .css, or with additional JavaScript - but still keeping to the concept of a 'generic' UI that is created dynamically.
More recently, Dan Haywood and I took the idea of the naked objects pattern much further forward with the introduction of theRestful Objects specification - an ultra-pure REST API that works for any rich domain model. Both the two naked objects implementations now also implement the Restful Objects specification. The point about this is that using the RO API it is now relatively easy to design new, radically different, UIs (generic, or fully bespoke) that talk to a server implementation of RO. In other words, it is relatively easy to create your own client-side implementation of the naked objects concepts, re-using either of the two main server-side implementations.
Spiro, which you mentioned, is our first attempt to create a library of building blocks for creating such a UI, using JavaScript (TypeScript, actually) and Angular.js. And the cool thing about using the RO spec, is that you could run the same client against any server implementation. I remend you take a good look at it.
I hit upon a few other possible key terms and found a few, although not all are in javascript.
These seem to be better fits...
- Metawidget
- OpenXava
- JMatter
Metawidget is especially interesting. It supports javascript, and is easy to use. You can just provide it your domain model (a JSON object) and it can generate a UI for it. Further, it doesn't take over your page, so it can live in a pre-existing UI, and it allows UI customizations.
They also include a parison page with similar products.
Another interesting one is BlueJ; it's an educational platform based on (the idea of?) Naked Objects, but can be used for smaller projects. Basically you can graphically create instances of your class via a context menu, then you can inspect and invoke the resulting object methods via the same way (potentially creating more objects in the process).
Going further afield, to looking towards any UI auto-generation, there are CRUD visualizers which are tied to the database.
- Scito
- SQLMaestro
- Xataface
- groceryCrud
I'm still researching these, especially the object ones, and am open to other suggestions.