<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: User interfaces: the enemy of Domain Driven Design</title>
	<atom:link href="http://blog.nakedobjects.org/2007/10/25/user-interfaces-the-enemy-of-domain-driven-design/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.nakedobjects.org/2007/10/25/user-interfaces-the-enemy-of-domain-driven-design/</link>
	<description>Ideas and experiences relating to the Naked Objects framework</description>
	<lastBuildDate>Thu, 01 Apr 2010 10:33:58 +0200</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Weefestaguews</title>
		<link>http://blog.nakedobjects.org/2007/10/25/user-interfaces-the-enemy-of-domain-driven-design/comment-page-1/#comment-365</link>
		<dc:creator>Weefestaguews</dc:creator>
		<pubDate>Thu, 07 Feb 2008 03:15:04 +0000</pubDate>
		<guid isPermaLink="false">http://blog.nakedobjects.org/2007/10/25/user-interfaces-the-enemy-of-domain-driven-design/#comment-365</guid>
		<description>Nice site keep it up! 
 
-------------------------------------- 
http://www.dasofte.com</description>
		<content:encoded><![CDATA[<p>Nice site keep it up! </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
<a href="http://www.dasofte.com" rel="nofollow">http://www.dasofte.com</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Gerald Loeffler</title>
		<link>http://blog.nakedobjects.org/2007/10/25/user-interfaces-the-enemy-of-domain-driven-design/comment-page-1/#comment-33</link>
		<dc:creator>Gerald Loeffler</dc:creator>
		<pubDate>Mon, 19 Nov 2007 14:13:34 +0000</pubDate>
		<guid isPermaLink="false">http://blog.nakedobjects.org/2007/10/25/user-interfaces-the-enemy-of-domain-driven-design/#comment-33</guid>
		<description>To define viewers for the type (class, interface) of domain object that they can visualise and have matching viewers automatically available when viewing an object is a very clean solution. Thanks for taking the time to answer.</description>
		<content:encoded><![CDATA[<p>To define viewers for the type (class, interface) of domain object that they can visualise and have matching viewers automatically available when viewing an object is a very clean solution. Thanks for taking the time to answer.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Richard Pawson</title>
		<link>http://blog.nakedobjects.org/2007/10/25/user-interfaces-the-enemy-of-domain-driven-design/comment-page-1/#comment-32</link>
		<dc:creator>Richard Pawson</dc:creator>
		<pubDate>Mon, 19 Nov 2007 11:23:20 +0000</pubDate>
		<guid isPermaLink="false">http://blog.nakedobjects.org/2007/10/25/user-interfaces-the-enemy-of-domain-driven-design/#comment-32</guid>
		<description>Gerald

I&#039;ve now posted a new blog on Workflow.  

In answer to your second original question ... the idea of needing multiple visual representations of an object is not at all incompatible with the concept of Naked Objects.  You can already see this in a very simple form on the current Drag and Drop user interface.  If you right click on the title bar of a window displaying a view of an object, you get a &#039;view menu&#039; which shows you generic view options such as &#039;View as Form, View as List, View as Table&#039;.  The specific view options available depend upon the characteristics of the object you are looking at: whether, for example, on whether you are looking at a single object or a collection.

This principle can easily be extended to provide the option to view any collection of objects that contain dates in the form of a calendar view, or any collection of objects that contain Lattitude and Longitude coordinates on a Map viewer.  Quite early on we used the latter when we built a prototype energy trading system (http://www.nakedobjects.org/book/section52.html). The NakedRCP viewer (http://sourceforge.net/projects/nakedrcp/), which is still experimental, but demonstrable, also supports this idea of plug-in viewers.

The design principle that we follow, though, is that the viewers should be as generic as possible, with minimal coupling.  Thus, for your example of viewing, say, a 3-D representation of a molecular structure, you might define a (Java) interface called HasMolecularStructure, which defined a method something like:

String getStructure()

That returns a standardised string representation of molecular structure (I&#039;m not a chemist!). Any object that implemented this interface, would, when viewed via Naked Objects, present the user with one or more alternative viewers for that object.  The point is that this might be implemented not just by objects that represent molecules, but by objects that contain representations of molecules e.g. Drug.</description>
		<content:encoded><![CDATA[<p>Gerald</p>
<p>I&#8217;ve now posted a new blog on Workflow.  </p>
<p>In answer to your second original question &#8230; the idea of needing multiple visual representations of an object is not at all incompatible with the concept of Naked Objects.  You can already see this in a very simple form on the current Drag and Drop user interface.  If you right click on the title bar of a window displaying a view of an object, you get a &#8216;view menu&#8217; which shows you generic view options such as &#8216;View as Form, View as List, View as Table&#8217;.  The specific view options available depend upon the characteristics of the object you are looking at: whether, for example, on whether you are looking at a single object or a collection.</p>
<p>This principle can easily be extended to provide the option to view any collection of objects that contain dates in the form of a calendar view, or any collection of objects that contain Lattitude and Longitude coordinates on a Map viewer.  Quite early on we used the latter when we built a prototype energy trading system (<a href="http://www.nakedobjects.org/book/section52.html)" rel="nofollow">http://www.nakedobjects.org/book/section52.html)</a>. The NakedRCP viewer (<a href="http://sourceforge.net/projects/nakedrcp/)" rel="nofollow">http://sourceforge.net/projects/nakedrcp/)</a>, which is still experimental, but demonstrable, also supports this idea of plug-in viewers.</p>
<p>The design principle that we follow, though, is that the viewers should be as generic as possible, with minimal coupling.  Thus, for your example of viewing, say, a 3-D representation of a molecular structure, you might define a (Java) interface called HasMolecularStructure, which defined a method something like:</p>
<p>String getStructure()</p>
<p>That returns a standardised string representation of molecular structure (I&#8217;m not a chemist!). Any object that implemented this interface, would, when viewed via Naked Objects, present the user with one or more alternative viewers for that object.  The point is that this might be implemented not just by objects that represent molecules, but by objects that contain representations of molecules e.g. Drug.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Richard Pawson</title>
		<link>http://blog.nakedobjects.org/2007/10/25/user-interfaces-the-enemy-of-domain-driven-design/comment-page-1/#comment-31</link>
		<dc:creator>Richard Pawson</dc:creator>
		<pubDate>Mon, 19 Nov 2007 09:31:20 +0000</pubDate>
		<guid isPermaLink="false">http://blog.nakedobjects.org/2007/10/25/user-interfaces-the-enemy-of-domain-driven-design/#comment-31</guid>
		<description>Actually, we had a discussion last week about precisely that idea i.e. of adding an @Aggregated annotation, which is much the same as your @Composition proposal.  The framework would then use this in two ways:

1.  It would prevent any object (other than the &#039;root&#039;) from holding a persistent reference to an @Aggregated object (i.e. one that formed part of another object).  In terms of the DND UI, for example, the user would not be able to drop an @Aggregated object into a field on another object, though they would be able to drop it into a parameter on a dialog.

2.  Per your idea, when the root object was destroyed, any aggregated objects would be destroyed.

We did not consider the idea that the UI could render the fields of any @Aggregated object &#039;in-line&#039; within the root object.  I agree that this would be possible, but my own experience would suggest that you&#039;d end up with object views that were too large.  Also, this would tend to make the aggregated object look less like an object i.e. that the user could invoke actions upon in its own right.  I see that as pretty important.

One option would be to have a parameter within the @Aggregated object indicating that the UI should (or should not) render it in-line so to speak.

We&#039;ll look at this again in due course.  To be honest, our development agenda is pretty full at the moment, so it isn&#039;t imminent.

BTW, since this discussion is no longer really connected to the original blog article, you might like to consider posting within the Help forum, which is a bit more active:  http://sourceforge.net/forum/forum.php?forum_id=544072

Richard</description>
		<content:encoded><![CDATA[<p>Actually, we had a discussion last week about precisely that idea i.e. of adding an @Aggregated annotation, which is much the same as your @Composition proposal.  The framework would then use this in two ways:</p>
<p>1.  It would prevent any object (other than the &#8216;root&#8217;) from holding a persistent reference to an @Aggregated object (i.e. one that formed part of another object).  In terms of the DND UI, for example, the user would not be able to drop an @Aggregated object into a field on another object, though they would be able to drop it into a parameter on a dialog.</p>
<p>2.  Per your idea, when the root object was destroyed, any aggregated objects would be destroyed.</p>
<p>We did not consider the idea that the UI could render the fields of any @Aggregated object &#8216;in-line&#8217; within the root object.  I agree that this would be possible, but my own experience would suggest that you&#8217;d end up with object views that were too large.  Also, this would tend to make the aggregated object look less like an object i.e. that the user could invoke actions upon in its own right.  I see that as pretty important.</p>
<p>One option would be to have a parameter within the @Aggregated object indicating that the UI should (or should not) render it in-line so to speak.</p>
<p>We&#8217;ll look at this again in due course.  To be honest, our development agenda is pretty full at the moment, so it isn&#8217;t imminent.</p>
<p>BTW, since this discussion is no longer really connected to the original blog article, you might like to consider posting within the Help forum, which is a bit more active:  <a href="http://sourceforge.net/forum/forum.php?forum_id=544072" rel="nofollow">http://sourceforge.net/forum/forum.php?forum_id=544072</a></p>
<p>Richard</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Gerald Loeffler</title>
		<link>http://blog.nakedobjects.org/2007/10/25/user-interfaces-the-enemy-of-domain-driven-design/comment-page-1/#comment-30</link>
		<dc:creator>Gerald Loeffler</dc:creator>
		<pubDate>Sun, 18 Nov 2007 16:52:40 +0000</pubDate>
		<guid isPermaLink="false">http://blog.nakedobjects.org/2007/10/25/user-interfaces-the-enemy-of-domain-driven-design/#comment-30</guid>
		<description>thank you Richard for your reply to my question 1 - and i&#039;m looking forward to your postings on questions 2 and 3 ;-)

regarding you HTML rant: i agree to a considerable degree - and what you are saying is one reason (the others being esthetics and simple opportunism) why everybody is going cracy about web 2.0 and rich internet applications. looking forward to that Flex UI for NO...

regarding my question 1 on the UI for master-detail relationships: to be honest, i was expecting a different answer: i was expecting you to tell me that the kind of relationship (association vs. composition) between objects of a class is a feature of the object model and hence must be captured there - it&#039;s not really a feature of the UI. which is the reason why UML allows us to express association and composition in class diagrams. i was expecting you to tell me that NO has a @Composition annotation that turns a plain Java reference (or collection thereof) from an association (the default in the absence of that annotation) into a composition and that the reflective UI reads that annotation and displays all &quot;detail&quot; objects together with the &quot;master&quot; objects. Nothing keeps me from contributing this, i know ;-)

i tend to think that composition also influences other aspects of the domain objects: hibernate cascade settings, for instance (typically &quot;all, delete-orphan&quot; for a composition). and if you automatically generate an audit log of changes to your entities than the change to a &quot;detail&quot; object is usually also a change to it&#039;s &quot;master&quot; object. these are just 2 other aspects of the system (in addition to the UI) that could benefit by a distinction between association and composition in the domain model.

  kind regards,
  gerald</description>
		<content:encoded><![CDATA[<p>thank you Richard for your reply to my question 1 &#8211; and i&#8217;m looking forward to your postings on questions 2 and 3 <img src='http://blog.nakedobjects.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>regarding you HTML rant: i agree to a considerable degree &#8211; and what you are saying is one reason (the others being esthetics and simple opportunism) why everybody is going cracy about web 2.0 and rich internet applications. looking forward to that Flex UI for NO&#8230;</p>
<p>regarding my question 1 on the UI for master-detail relationships: to be honest, i was expecting a different answer: i was expecting you to tell me that the kind of relationship (association vs. composition) between objects of a class is a feature of the object model and hence must be captured there &#8211; it&#8217;s not really a feature of the UI. which is the reason why UML allows us to express association and composition in class diagrams. i was expecting you to tell me that NO has a @Composition annotation that turns a plain Java reference (or collection thereof) from an association (the default in the absence of that annotation) into a composition and that the reflective UI reads that annotation and displays all &#8220;detail&#8221; objects together with the &#8220;master&#8221; objects. Nothing keeps me from contributing this, i know <img src='http://blog.nakedobjects.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>i tend to think that composition also influences other aspects of the domain objects: hibernate cascade settings, for instance (typically &#8220;all, delete-orphan&#8221; for a composition). and if you automatically generate an audit log of changes to your entities than the change to a &#8220;detail&#8221; object is usually also a change to it&#8217;s &#8220;master&#8221; object. these are just 2 other aspects of the system (in addition to the UI) that could benefit by a distinction between association and composition in the domain model.</p>
<p>  kind regards,<br />
  gerald</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Richard Pawson</title>
		<link>http://blog.nakedobjects.org/2007/10/25/user-interfaces-the-enemy-of-domain-driven-design/comment-page-1/#comment-28</link>
		<dc:creator>Richard Pawson</dc:creator>
		<pubDate>Fri, 16 Nov 2007 16:30:47 +0000</pubDate>
		<guid isPermaLink="false">http://blog.nakedobjects.org/2007/10/25/user-interfaces-the-enemy-of-domain-driven-design/#comment-28</guid>
		<description>Gerald

Interesting points.  I&#039;ll answer the first one here.  The other two require more detailed answers, so I&#039;ll use them as the prompt for another blog -  possibly later on today.

So on the first point, my response is that on the default Naked Objects user interface (the &#039;drag and drop&#039; UI) when you open a view of an object you can see its component objects (i.e. referenced in its properties).  All you see initially is the icon and title for each. So if the state of a component object is likely to be seen as of direct interest to the viewer of the parent object, then the component object&#039;s title should reflect that state.  The user always has the option of then opening up a separate view of the component object if they need more detail.  Again, on the drag and drop UI, double clicking will open up that view as a separate window.

Of course the latter works much less well on the pure HTML UI, because that only has a single window.  Which leads me to another rant ;-)  The growth of HTML user interfaces, even for internally-accessed systems has done enormous damage to our understanding of systems design.  HTML is fine for systems to be used by the public, which must be very tightly scripted and aesthetically pleasing.  (These are what Alan Cooper called &#039;transient systems&#039;).  But it is totally unsuited for what he called &#039;sovereign systems&#039; which is what Naked Objects is designed for.

Richard</description>
		<content:encoded><![CDATA[<p>Gerald</p>
<p>Interesting points.  I&#8217;ll answer the first one here.  The other two require more detailed answers, so I&#8217;ll use them as the prompt for another blog &#8211;  possibly later on today.</p>
<p>So on the first point, my response is that on the default Naked Objects user interface (the &#8216;drag and drop&#8217; UI) when you open a view of an object you can see its component objects (i.e. referenced in its properties).  All you see initially is the icon and title for each. So if the state of a component object is likely to be seen as of direct interest to the viewer of the parent object, then the component object&#8217;s title should reflect that state.  The user always has the option of then opening up a separate view of the component object if they need more detail.  Again, on the drag and drop UI, double clicking will open up that view as a separate window.</p>
<p>Of course the latter works much less well on the pure HTML UI, because that only has a single window.  Which leads me to another rant <img src='http://blog.nakedobjects.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />   The growth of HTML user interfaces, even for internally-accessed systems has done enormous damage to our understanding of systems design.  HTML is fine for systems to be used by the public, which must be very tightly scripted and aesthetically pleasing.  (These are what Alan Cooper called &#8216;transient systems&#8217;).  But it is totally unsuited for what he called &#8217;sovereign systems&#8217; which is what Naked Objects is designed for.</p>
<p>Richard</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Gerald Loeffler</title>
		<link>http://blog.nakedobjects.org/2007/10/25/user-interfaces-the-enemy-of-domain-driven-design/comment-page-1/#comment-27</link>
		<dc:creator>Gerald Loeffler</dc:creator>
		<pubDate>Fri, 16 Nov 2007 15:05:50 +0000</pubDate>
		<guid isPermaLink="false">http://blog.nakedobjects.org/2007/10/25/user-interfaces-the-enemy-of-domain-driven-design/#comment-27</guid>
		<description>Very convincingly argued.

I would be interested to learn your view on 3 related issues (which must be very common questions, i suppose):
1. when visualising the state of a &quot;master&quot; object one sometimes needs to include the state of related &quot;detail&quot; objects (because it is a composition-type relationship and viewing the &quot;master&quot; object alone would be incomplete or inefficient). and in other cases this is not at all the case. how do you distinguish these cases without having views that can be fine-tuned?
2. what if a class has several valid visual representations (such as a Molecule containing Atoms) that are appropriate depending on context: sometimes i want to see the ball-and-stick drawing of the Molecule and all its Atoms; sometimes only the &quot;heavy&quot; Atoms; sometimes i want to manipulate the numbers (the object&#039;s properties) directly...
3. and finally the issue of wizards/workflow/business process: a wizard is a pure GUI concept, with no equivalent in the domain model; a business process/workflow has elements of business logic (orchestrating other (&quot;service&quot;) objects) but it also has an element of user interaction, namely the notion of a &quot;work item&quot; and the &quot;next thing to do&quot; for the user. and a workflow may also restrict what a user may do at a particular point in the process (suggesting that not all of an object&#039;s state is accessible at all times).

  kind regards,
  gerald</description>
		<content:encoded><![CDATA[<p>Very convincingly argued.</p>
<p>I would be interested to learn your view on 3 related issues (which must be very common questions, i suppose):<br />
1. when visualising the state of a &#8220;master&#8221; object one sometimes needs to include the state of related &#8220;detail&#8221; objects (because it is a composition-type relationship and viewing the &#8220;master&#8221; object alone would be incomplete or inefficient). and in other cases this is not at all the case. how do you distinguish these cases without having views that can be fine-tuned?<br />
2. what if a class has several valid visual representations (such as a Molecule containing Atoms) that are appropriate depending on context: sometimes i want to see the ball-and-stick drawing of the Molecule and all its Atoms; sometimes only the &#8220;heavy&#8221; Atoms; sometimes i want to manipulate the numbers (the object&#8217;s properties) directly&#8230;<br />
3. and finally the issue of wizards/workflow/business process: a wizard is a pure GUI concept, with no equivalent in the domain model; a business process/workflow has elements of business logic (orchestrating other (&#8221;service&#8221;) objects) but it also has an element of user interaction, namely the notion of a &#8220;work item&#8221; and the &#8220;next thing to do&#8221; for the user. and a workflow may also restrict what a user may do at a particular point in the process (suggesting that not all of an object&#8217;s state is accessible at all times).</p>
<p>  kind regards,<br />
  gerald</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dan Haywood</title>
		<link>http://blog.nakedobjects.org/2007/10/25/user-interfaces-the-enemy-of-domain-driven-design/comment-page-1/#comment-23</link>
		<dc:creator>Dan Haywood</dc:creator>
		<pubDate>Thu, 15 Nov 2007 10:22:19 +0000</pubDate>
		<guid isPermaLink="false">http://blog.nakedobjects.org/2007/10/25/user-interfaces-the-enemy-of-domain-driven-design/#comment-23</guid>
		<description>Eclipse RCP viewer is being worked on at http://sourceforge.net/projects/nakedrcp under the EPL license.

Since the viewer is Eclipse based, new views of objects can be written by implementing the appropriate extension point.  To prove the concept I&#039;ve already done simple spikes of a calendar and a google maps mashup.

You can see screenshots of the generic viewer (without the extensions) at http://sourceforge.net/project/screenshots.php?group_id=167340 and download the code at http://sourceforge.net/svn/?group_id=167340 .

Dan</description>
		<content:encoded><![CDATA[<p>Eclipse RCP viewer is being worked on at <a href="http://sourceforge.net/projects/nakedrcp" rel="nofollow">http://sourceforge.net/projects/nakedrcp</a> under the EPL license.</p>
<p>Since the viewer is Eclipse based, new views of objects can be written by implementing the appropriate extension point.  To prove the concept I&#8217;ve already done simple spikes of a calendar and a google maps mashup.</p>
<p>You can see screenshots of the generic viewer (without the extensions) at <a href="http://sourceforge.net/project/screenshots.php?group_id=167340" rel="nofollow">http://sourceforge.net/project/screenshots.php?group_id=167340</a> and download the code at <a href="http://sourceforge.net/svn/?group_id=167340" rel="nofollow">http://sourceforge.net/svn/?group_id=167340</a> .</p>
<p>Dan</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Richard Pawson</title>
		<link>http://blog.nakedobjects.org/2007/10/25/user-interfaces-the-enemy-of-domain-driven-design/comment-page-1/#comment-11</link>
		<dc:creator>Richard Pawson</dc:creator>
		<pubDate>Tue, 06 Nov 2007 15:22:14 +0000</pubDate>
		<guid isPermaLink="false">http://blog.nakedobjects.org/2007/10/25/user-interfaces-the-enemy-of-domain-driven-design/#comment-11</guid>
		<description>FYI Dan Haywood has been working on an RCP user interface for Naked Objects, and will, I believe, be making it available quite soon.  You might well find that this meets your requirements.  Stay tuned to the Naked Objects forums, and/or subscribe to the mailing list (via http://www.nakedobjects.org/resources/index.shtml) for more details.  Richard</description>
		<content:encoded><![CDATA[<p>FYI Dan Haywood has been working on an RCP user interface for Naked Objects, and will, I believe, be making it available quite soon.  You might well find that this meets your requirements.  Stay tuned to the Naked Objects forums, and/or subscribe to the mailing list (via <a href="http://www.nakedobjects.org/resources/index.shtml)" rel="nofollow">http://www.nakedobjects.org/resources/index.shtml)</a> for more details.  Richard</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Robert</title>
		<link>http://blog.nakedobjects.org/2007/10/25/user-interfaces-the-enemy-of-domain-driven-design/comment-page-1/#comment-10</link>
		<dc:creator>Robert</dc:creator>
		<pubDate>Tue, 06 Nov 2007 14:44:00 +0000</pubDate>
		<guid isPermaLink="false">http://blog.nakedobjects.org/2007/10/25/user-interfaces-the-enemy-of-domain-driven-design/#comment-10</guid>
		<description>I really like the DDD idea and I plan to push this for a major application in the near future. Customizing the look and feel (or having a nicer ui out of box) would be nice to have.</description>
		<content:encoded><![CDATA[<p>I really like the DDD idea and I plan to push this for a major application in the near future. Customizing the look and feel (or having a nicer ui out of box) would be nice to have.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

