<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Man vs Code : ObjectSpaces</title><link>http://blogs.msdn.com/aconrad/archive/category/2231.aspx</link><description /><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Stop, Drop, and Roll</title><link>http://blogs.msdn.com/aconrad/archive/2005/03/28/403123.aspx</link><pubDate>Tue, 29 Mar 2005 00:32:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:403123</guid><dc:creator>aconrad</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/aconrad/comments/403123.aspx</comments><wfw:commentRss>http://blogs.msdn.com/aconrad/commentrss.aspx?PostID=403123</wfw:commentRss><description>&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Arial"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;font size="3"&gt;A couple of weeks ago, I made a &lt;A href="http://blogs.msdn.com/aconrad/archive/2005/03/16/396999.aspx"&gt;post&lt;/a&gt; that I thought some sort of client side data structure, which was designed to store projections of a domain model instances (both in memory and persisted in a data store), was a necessary part of any O/R framework.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;My conjecture was that this was required due to the current limitations of the mainstream programming languages with respect to dynamic typing in addition to the fact that most client side caches provide a common set of services which can be applied to both tuples and object graphs.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Arial" size="3"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Arial"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;font size="3"&gt;Amazingly enough, I was flamed by both camps – the dataset crowd and the O/R guys, which is quite a feat.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;However, surprising to me, was how polarized this issue had become.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Arial" size="3"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Arial"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;font size="3"&gt;Obviously, either I was not correct, not clear about my points, or some in the development community didn’t want to hear what I said.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Arial" size="3"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Arial"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;font size="3"&gt;This entry is an effort to clear up my original post – if you still don’t agree, please feel free to flame away.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Arial" size="3"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Arial"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;font size="3"&gt;So – my original points were:&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Arial" size="3"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;ol style="MARGIN-TOP: 0in" type="1"&gt; &lt;li class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;&lt;font face="Arial"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;font size="3"&gt;Projections, whether over relation tables or objects graphs are a very important cog of most enterprise applications.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt; &lt;li class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;&lt;font face="Arial"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;font size="3"&gt;None of the .net languages or Java have a good way of natively exposing or storing the results of the projection.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Hence, types like DataRow exist.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt; &lt;li class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;&lt;font face="Arial"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;font size="3"&gt;Existing relation caches (for example, like the DataSet) offer a number of services which are interesting to both tuples and object graphs.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Arial" size="3"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Arial"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;font size="3"&gt;There is no doubt in my mind that #2 from above will change long term.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Even some of the work coming out of Microsoft shows that better solutions are being worked on.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;For &lt;a href="http://msdn.microsoft.com/XML/BuildingXML/XMLColumns/default.aspx?pull=/library/en-us/dnexxml/html/xml01142005.asp"&gt;example&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Arial"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;font size="3"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;font face="Arial" size="3"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt; &lt;p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Arial"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;font size="3"&gt;But as of today, it seems like current O/R frameworks have an inherent weakness with projections.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;The two most popular existing solutions I have seen is to support dynamic instantiation or return object arrays.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;My belief is utilizing a client side relation cache (for example – like the DataSet) is superior to the latter in almost every case or to the latter in cases where this is going to cause type inflation (MyPartialCustomer) or when clean updateability is required. &lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Arial" size="3"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Arial"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;font size="3"&gt;I would also push back of the DataSet crowd with some similar arguments.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;First, you may not believe it, but O/R frameworks are designed to take care of a lot of code that you currently have to write yourself.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Second, do you really like the DataSet (i.e. The API and architecture) or do you like the rich services it provides which in most cases are the same services required by a good O/R framework?&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;My guess is that in most cases it is the services.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=403123" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/aconrad/archive/tags/ObjectSpaces/default.aspx">ObjectSpaces</category><category domain="http://blogs.msdn.com/aconrad/archive/tags/ADO.net/default.aspx">ADO.net</category></item><item><title>Nix the DataSet??????</title><link>http://blogs.msdn.com/aconrad/archive/2005/03/16/396999.aspx</link><pubDate>Wed, 16 Mar 2005 19:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:396999</guid><dc:creator>aconrad</dc:creator><slash:comments>16</slash:comments><comments>http://blogs.msdn.com/aconrad/comments/396999.aspx</comments><wfw:commentRss>http://blogs.msdn.com/aconrad/commentrss.aspx?PostID=396999</wfw:commentRss><description>&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"&gt;&lt;font face="Arial"&gt;Some interesting comments from my entry on new DataSet features…&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Arial" color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;&lt;font color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-STYLE: italic; FONT-FAMILY: Verdana; mso-bidi-font-style: normal"&gt;&lt;font face="Arial"&gt;Please nix the DataSet from the framework entirely and re-focus on the domain-oriented data access work you were doing prior to Tech-Ed 04. If that's not possible, please have the Visual Studio team desist from distracting .NET culture from Domain-Driven Design with that nasty, nasty typed DataSet RADule :) &lt;br /&gt;&lt;br /&gt;I hope this helps,&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Scott Bellware&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"&gt;&lt;a href="http://www.geekswithblogs.com/sbellware/"&gt;&lt;font face="Arial" color="#000080"&gt;http://www.geekswithblogs.com/sbellware/&lt;/font&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Arial" color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Arial" color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;&lt;font color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-STYLE: italic; FONT-FAMILY: Verdana; mso-bidi-font-style: normal"&gt;&lt;font face="Arial"&gt;I don't advocate that for multiple reasons.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;&lt;font color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-STYLE: italic; FONT-FAMILY: Verdana; mso-bidi-font-style: normal"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font face="Arial"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;a href="http://codebetter.com/blogs/sahil.malik" target="_blank"&gt;&lt;font face="Arial" color="black"&gt;&lt;span style="COLOR: black"&gt;Sahil Malik&lt;/span&gt;&lt;/font&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;&lt;font size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-STYLE: italic; FONT-FAMILY: Verdana; mso-bidi-font-style: normal"&gt;&lt;a href="http://codebetter.com/blogs/sahil.malik/"&gt;&lt;font face="Arial" color="#000080"&gt;http://codebetter.com/blogs/sahil.malik/&lt;/font&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Arial" color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"&gt;&lt;font face="Arial"&gt;Scott is an old friend from the ObjectSpaces days, so I think he is partially kidding. And I can’t say I totally disagree with him WRT the typed DataSet because I think it has been shown that O/R solutions can do better then code generation.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;But that is a different topic for a different time.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Arial" color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"&gt;&lt;font face="Arial"&gt;What I do want to talk about is projections in terms of an O/R solution – which is an interesting topic when discussing the DataSet.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Arial" color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"&gt;&lt;font face="Arial"&gt;Object instances in O/R solution can basically have five states:&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Arial" color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;ol style="MARGIN-TOP: 0in" type="1"&gt; &lt;li class="MsoNormal" style="MARGIN: 0in 0in 0pt; COLOR: black; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;&lt;font color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font face="Arial"&gt;Persisted in the data store (shredded or not).&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt; &lt;li class="MsoNormal" style="MARGIN: 0in 0in 0pt; COLOR: black; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;&lt;font color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font face="Arial"&gt;In memory, but not materialized.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt; &lt;li class="MsoNormal" style="MARGIN: 0in 0in 0pt; COLOR: black; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;&lt;font color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font face="Arial"&gt;In memory, materialized as an object instance.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt; &lt;li class="MsoNormal" style="MARGIN: 0in 0in 0pt; COLOR: black; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;&lt;font color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font face="Arial"&gt;Partially in memory, materialized as an object instance.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt; &lt;li class="MsoNormal" style="MARGIN: 0in 0in 0pt; COLOR: black; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;&lt;font color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font face="Arial"&gt;Partially in memory, not materialized.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Arial" color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"&gt;&lt;font face="Arial"&gt;#1 is the traditional way of storing data in relational databases.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Shredded means the individual properties including references have been set as column values and that the object identity is defined by a single row of storage (in fancier mappings – this row itself might be a project of base tables and/ or views).&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;With relational database advances, there is also the ability to store the object instance wholly (i.e. Sql Server 2005 UDTs, etc) or even partially shred it and store the rest in an untyped bag (i.e. the Xml DataType)&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Arial" color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"&gt;&lt;font face="Arial"&gt;#2 When O/R frameworks pull data out of the data store there is a transition between the rowsets being returned from the data store and the object graph returned to the consumer.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Basically, this means that the object instances live in an un-materialized state.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Since materialization is not cheap, many O/R solutions – particularly with client side caches, store the data in an “un-materialized” state until the specific object instances are required by the consumer.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;In fact, with some O/R frameworks – users can access this data.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Arial" color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"&gt;&lt;font face="Arial"&gt;#3 This is the in-memory materialized domain model – basically the corner stone feature of all O/R frameworks.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Arial" color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"&gt;&lt;font face="Arial"&gt;#4 Same as 3, but value properties and/ or references are delayed loaded.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;In terms of domain model consumer and for this discussion, #3 &amp;amp; #4 are the same.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;(I know there are some issues here, see my &lt;/font&gt;&lt;A href="http://blogs.msdn.com/aconrad/archive/2004/04/30/124037.aspx"&gt;&lt;font face="Arial"&gt;comments &lt;/font&gt;&lt;/a&gt;&lt;font face="Arial"&gt;in the past on this).&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"&gt;&lt;A href="http://blogs.msdn.com/aconrad/archive/2004/04/30/124037.aspx"&gt;&lt;font face="Arial" color="black"&gt;&lt;span style="COLOR: black"&gt;&lt;/span&gt;&lt;/font&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"&gt;&lt;font face="Arial"&gt;#5 are projections of the domain model which have not been materialized as object instances – and may never get materialized. (Actually, #2 is probably a sub case of this). &lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;In fact, depending on what the projection is – it might not even be possible or even desirable to materialize the objects. &lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Arial" color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"&gt;&lt;font face="Arial"&gt;Take for example a scenario where a domain model consumer wants to search for all the customers with a given last name.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;From there they want to display the results to the application user and let them select the specific customer.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Now, let’s assume that the Customer type is fairly complex and has 30 or so properties of which only a handful are useful for the user to visually select the “right customer”.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Performance wise, this would only mean selecting a few of the type properties (a projection of the domain model) in the initial query.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;This design issue is quite familiar to anyone who has ever written app that binds query results to a grid.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;For O/R solutions this presents an interesting issue in that the properties in the project may not allow for materialization of the object instances for the retrieved type.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;For example, the type has several properties which either don’t have meaningful defaults, or if not initialized to persisted values leave an object instance in an illegal state.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Arial" color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"&gt;&lt;font face="Arial"&gt;Further, for a common last name, performance wise it might not even be desirable to materialize all the customers as object instances even if one could.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;So the question is, if the objects are not materialized, how is it stored/ accessible in memory.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Obviously, “rowsets” are a very good idea since that is generally how relational data is exposed through data access APIs. &lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;So, a relational, client side cache (like the DataSet) would seem to be really useful.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Interestingly, for this sole purpose, the DataSet is probably overkill.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Really all is needed is some sort of client side collection object, even arrays could work.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;However, for the scenario discussed above, one is going to need other features like binding and sort/ filter/ find capabilities – which the DataSet is very good at.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Ironically, these are features that are required by most applications independent of data access model.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Arial" color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font color="black" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"&gt;&lt;font face="Arial"&gt;My belief has always been that on average roughly two-thirds of all queries executed by applications requiring database persistence are projections WRT to the domain model.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Unless an O/R framework has a solution for this, it either forces the domain model designer to include awkward “partial types” (i.e. PartialCustomer), utilize some sort of weak typing hack in their domain model (which kinds of goes against O/R in the first place), or translate projection queries into queries which can always generate results that can be materialized (while accepting the performance overhead).&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Arial" color="#333333" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Arial" color="#333333" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=396999" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/aconrad/archive/tags/ObjectSpaces/default.aspx">ObjectSpaces</category><category domain="http://blogs.msdn.com/aconrad/archive/tags/ADO.net/default.aspx">ADO.net</category></item><item><title>O/R redux</title><link>http://blogs.msdn.com/aconrad/archive/2004/12/28/339164.aspx</link><pubDate>Wed, 29 Dec 2004 01:12:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:339164</guid><dc:creator>aconrad</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/aconrad/comments/339164.aspx</comments><wfw:commentRss>http://blogs.msdn.com/aconrad/commentrss.aspx?PostID=339164</wfw:commentRss><description>&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;font size="3"&gt;One of the big conversations that has been going on for some time in the Java world is how prescriptive container frameworks such as EJB and Spring should be.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;It is fairly well known, that for O/R mapping frameworks the same conversation exists since O/R persistence is really just one (albeit complicated) service that can be provided by a container.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;The Java folks like to refer to POJO versus non-POJO solutions.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Inside Microsoft, when discussing O/R – we talk about POCO (Plain old CLR objects) and prescriptive versus non-prescriptive.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Ignoring the details of implementing the various frameworks (IoC etc), it’s really all the same discussion.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;font size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;font size="3"&gt;The POCO/ POJO concept is fairly straight forward.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;The proponents suggest that a good O/R solution should allow the user to map simple domain model classes to the persistent storage without requiring the class to implement interfaces or inherit from specific base classes.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;In other words, there are no prescriptive requirements for the domain model developer and the types being developed could be used outside of the context of the O/R framework.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;They are free to develop their domain model as they like and is decoupled from the database schema.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;I like to call this “design time” transparency.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;font size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;font size="3"&gt;Nanshan Zeng – a coworker of mine for several years now in both the Xml and ObjectSpaces teams made some interesting points about this topic when we were talking a couple of weeks back.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;He said that in terms of O/R, the POJO/ POCO is really somewhat of a red herring and that the real conversation should be about the flexibility and extensibility of the mapping solution.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;In other words, if one is mapping to an existing legacy data store how much of the abstract is leaky and therefore causes the database schema to dictate the domain model type hierarchy.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;font size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;font size="3"&gt;For example, if my O/R framework only supported mapping a given type to single database table/ view then I would be limited to developing domain model types which were 1-1 with the database tables.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Obviously, there are ways to fix this – creating a database view or mapping to a sql query instead of a table, but I think the example illustrates my point.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;font size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;font size="3"&gt;It seems that although there are some interesting opinions on the amount of &lt;a href="http://blog.hibernate.org/cgi-bin/blosxom.cgi/2004/08/25#join"&gt;flexibility&lt;/a&gt; required to make a good O/R framework, there seems to be some good solid agreement that POJO/ POCO solutions must provide non-prescriptive and flexible mapping solutions.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;And although the anti-EJB crowd would most likely disagree, I am beginning to think that the latter is much more important.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=339164" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/aconrad/archive/tags/ObjectSpaces/default.aspx">ObjectSpaces</category></item><item><title>One crazy Italian</title><link>http://blogs.msdn.com/aconrad/archive/2004/09/07/226472.aspx</link><pubDate>Tue, 07 Sep 2004 21:06:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:226472</guid><dc:creator>aconrad</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/aconrad/comments/226472.aspx</comments><wfw:commentRss>http://blogs.msdn.com/aconrad/commentrss.aspx?PostID=226472</wfw:commentRss><description>&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;font size="3"&gt;Luca Bolognese, one crazy Italian, now has a &lt;a href="http://blogs.msdn.com/lucabol/"&gt;blog&lt;/a&gt;… and he is even writing it himself.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Luca was Mr. ObjectSpaces back in the day and is now working with the C# team on the sequence operator work.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=226472" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/aconrad/archive/tags/ObjectSpaces/default.aspx">ObjectSpaces</category></item><item><title>Comment on a good comment</title><link>http://blogs.msdn.com/aconrad/archive/2004/06/23/163858.aspx</link><pubDate>Wed, 23 Jun 2004 17:32:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:163858</guid><dc:creator>aconrad</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/aconrad/comments/163858.aspx</comments><wfw:commentRss>http://blogs.msdn.com/aconrad/commentrss.aspx?PostID=163858</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=Arial size=2&gt;Got a very observant &lt;A href="http://weblogs.asp.net/aconrad/archive/2004/06/14/155279.aspx#156206"&gt;comment&lt;/A&gt; on my &lt;A href="http://weblogs.asp.net/aconrad/archive/2004/06/14/155279.aspx"&gt;ObjectSpaces and WinFS Part 2&lt;/A&gt; entry:&lt;BR&gt;&lt;BR&gt;&lt;EM&gt;My big scare is that merging ObjectSpaces and WinFS will restrict me from using OS as the persistence layer in places where the customer doesn't have and won't upgrade to the latest windows platform or even the latest SP... in these cases, I'm stuck rolling my own O/R mapping and persistence. &lt;BR&gt;&lt;BR&gt;if OS+WinFS = use on any platform I can currently run .Net apps on without requiring an OS update, great. If not, elsewhere look must I -- and suddenly OS isn't that exciting anymore..&lt;BR&gt;&lt;/EM&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;EM&gt;&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Yes.&amp;nbsp; We know that is a problem that we will need to solve going forward.&amp;nbsp; There are currently no specifics public details about solving that issue that I can disclose, but I want to reassure that it is a well known problem with the merger of ObjectSpaces and WinFS.&lt;/P&gt;&lt;/FONT&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=163858" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/aconrad/archive/tags/ObjectSpaces/default.aspx">ObjectSpaces</category></item><item><title>The Good, the Bad and the Ugly</title><link>http://blogs.msdn.com/aconrad/archive/2004/05/25/141821.aspx</link><pubDate>Tue, 25 May 2004 23:22:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:141821</guid><dc:creator>aconrad</dc:creator><slash:comments>16</slash:comments><comments>http://blogs.msdn.com/aconrad/comments/141821.aspx</comments><wfw:commentRss>http://blogs.msdn.com/aconrad/commentrss.aspx?PostID=141821</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=Arial size=2&gt;I will be posting more about the changes to the &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/data/"&gt;&lt;FONT face=Arial size=2&gt;ObjectSpaces release plans&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial size=2&gt;&amp;nbsp;in the near future- but in the mean time, I wanted to make sure everyone was aware of that we are willing to listen to any and all feedback about the changes.&amp;nbsp; The following lists all the avenues to do so:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;1.&amp;nbsp; Email the feedback alias:&amp;nbsp; &lt;/FONT&gt;&lt;A href="mailto:orfeedbk@microsoft.com"&gt;&lt;FONT face=Arial size=2&gt;orfeedbk@microsoft.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial size=2&gt;.&amp;nbsp; This will be seen by multiple members of the WinFS program management team.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;2.&amp;nbsp; Comment on my blog.&amp;nbsp; I review all comments posted to my blog.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;3.&amp;nbsp; Email me directly:&amp;nbsp; &lt;/FONT&gt;&lt;A href="mailto:aconrad@microsoft.com"&gt;&lt;FONT face=Arial size=2&gt;aconrad@microsoft.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial size=2&gt;.&amp;nbsp; I am always perpetually behind with my email, but I read everything eventually.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;If you are at TechEd this week, you have a couple of additional options:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;4.&amp;nbsp; Come to the Data Access booth and ask for myself or Luca.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;5.&amp;nbsp; Come to Luca's O/R talk on Thursday.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;6.&amp;nbsp; Visit us in the Sql Server cabana for our scheduled times.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;7.&amp;nbsp; Attend the O/R BOF on Tuesday night at 6:30.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;I am ready for all feedback.&amp;nbsp; The Good, the Bad, and the Ugly.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=141821" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/aconrad/archive/tags/ObjectSpaces/default.aspx">ObjectSpaces</category><category domain="http://blogs.msdn.com/aconrad/archive/tags/TechEd+2004/default.aspx">TechEd 2004</category></item><item><title>Ramblings about POCO*, transparency and delayed load.</title><link>http://blogs.msdn.com/aconrad/archive/2004/04/30/124037.aspx</link><pubDate>Fri, 30 Apr 2004 18:16:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:124037</guid><dc:creator>aconrad</dc:creator><slash:comments>14</slash:comments><comments>http://blogs.msdn.com/aconrad/comments/124037.aspx</comments><wfw:commentRss>http://blogs.msdn.com/aconrad/commentrss.aspx?PostID=124037</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;As someone pointed out, I have been referring to ObjectSpaces as supporting true POCO &amp;#8211; which is technically incorrect.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;ObjectSpaces does prescribe the usage of ObjectHolder and ObjectList for delayed load cases (more of the merits of delayed loading down below).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;However, beyond that &amp;#8211; there is no prescribed type definition.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;So for the sake of being technically correct, I will start referring to ObjectSpaces as POCO*.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;I think this leads to an interesting conversation around whether ObjectSpaces supports true transparency.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;In other words, can the domain model developer design types for a particular business problem without regards to the fact that the objects will be persisted to a permanent data store?&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;To answer this question, I want to first look at the pillars of Indigo:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG&gt;&lt;B style="mso-ansi-font-weight: normal"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN style="FONT-WEIGHT: normal; FONT-STYLE: italic; FONT-FAMILY: Arial; mso-bidi-font-style: normal; mso-bidi-font-weight: bold"&gt;Service Boundaries are Explicit and Costly to traverse&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;/B&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;STRONG&gt;&lt;B style="mso-ansi-font-weight: normal"&gt;&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-bidi-font-weight: bold"&gt;Think of the data store as one very complex and powerful service.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;There is no way to avoid this with current relational database technology unless the store 1) is local, 2) is mostly read-only access or used exclusively and 3) has huge amounts of disk space to support a large amount of indexes.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;In other words, the boundary between the database and the database application is explicit and therefore all current data access technology cannot support transparent access.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;In then follows that ObjectSpaces cannot support true transparency.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;At least the developer who is designing the domain types, the mapping and/ or the database must be aware of this explicit boundary. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;I also doubt that the developer just utilizing the domain types can even use them transparently.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;There are still runtime concerns like transaction management, batching considerations and dealing with concurrency errors.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I suppose one could develop a framework that abstracts away these realities from the domain model, but that would lead toward making the physical persistence transparent to the domain model &amp;#8211; which I have yet to see a framework which completely does that and have doubts it can be done for significantly complex architectures.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-bidi-font-weight: bold"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;So, in general - POCO* minimizes the burden of the domain model developer needing to know details about the datastore, however one must still know the datastore exists and lives across a service boundary.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;In other words, it offers a nice abstraction but not complete transparency.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Matt Warren has &lt;A href="http://weblogs.asp.net/mattwar/archive/2004/04/20/117096.aspx"&gt;some interesting points&lt;/A&gt; about the evils of loading on demand.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I for the most part, can&amp;#8217;t say I particularly disagree with him.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I do though suggest for value types, particularly for very &lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN style="FONT-STYLE: italic; mso-bidi-font-style: normal"&gt;large&lt;/SPAN&gt;&lt;/I&gt; ones &amp;#8211; this requirement justifies the means.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;At the end of the day I don&amp;#8217;t want to download the entire movie when I want to see the date is was created.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;However that said, I would still like to drill down into what I believe the true evil is:&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;preserving graph fidelity. Think for a second that ObjectSpaces did not support delayed loading (then we would have true POCO instead of POCO*).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;ObjectSpaces still would support the concept of object identity across queries via the ObjectManager. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;That is, if the set of results for query 1 and query 2 intersect, then ObjectSpaces is going to add the results to query 2 only for the non-intersecting subset.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The rest gets thrown away since it is already in memory.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;So I am going to take the liberty of extrapolating what Matt said about demand loading being evil to really mean that graph fidelity should not be maintained across query executions. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Let&amp;#8217;s table that discussion for a second, and discuss a very specific evil with delayed loading when not using a prescriptive solution like ObjectHolder/ ObjectList.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Short of code injection, the only way to support delayed loading is through some sort of context that would know how to retrieve related object(s) for a given object at runtime.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Then the problem becomes is what is the meaning of null?&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Take for example, the case where I have type A which has a reference to type B called b.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I run a query that loads A&amp;#8217;s but does not include B in the span. In a true POCO model, b is set to a null value by the engine materializing an instance of A.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;What does that null mean?&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;That A does not have a corresponding b or that b has not been materialized in memory graph?&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Really it is quite ambiguous unless of course one takes in account the original query.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;So it you buy that some sort of delayed loading support is desirable, then ObjectHolder/ ObjectList are a necessary divergence from POCO, unless of course code injection is utilized.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;But that is another topic for another time.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;So where are we now? A limited amount of delayed loading is ok, but completely preserving graph fidelity across query executions is a very dangerous game with very bad consequences for those who embrace it&amp;#8217;s dark side.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Should preserving graph fidelity really be the job of an O/R mapping framework.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Well, I can probably argue each side of the discussion.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Perhaps another topic for another time.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;So, to conclude &amp;#8211; my points:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: Arial"&gt;&lt;SPAN style="mso-list: Ignore"&gt;1)&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;ObjectSpaces does not support true transparency.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Unless there is a huge technological jump in datastore technology, this is not feasible.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;What it does support is a nice away to decouple&amp;nbsp;the domain model from the data access layer, however it is not a transparent technology for persisting objects.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: Arial"&gt;&lt;SPAN style="mso-list: Ignore"&gt;2)&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;ObjectHolder/ ObjectList are a necessary divergence from the true POCO model.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It allows the delayed loading of large values on demand while disambiguating the value of null.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It however, can be abused (see point 3).&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: Arial"&gt;&lt;SPAN style="mso-list: Ignore"&gt;3)&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;ObjectSpaces can preserve graph fidelity across query executions and therefore allow the user to materialize sections of&amp;nbsp;their domain model on demand.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This however can be abused and can lead to cases of the in-memory representation being out of sync with the database in a significantly complex way. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;Like most software, this feature is a tool which can either be used correctly or abused; it is up to the developer to do what is right for their design.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Further, utilizing this feature correctly probably means even less transparency for ObjectSpaces (see point 1).&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=124037" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/aconrad/archive/tags/ObjectSpaces/default.aspx">ObjectSpaces</category></item><item><title>Orthogonal to Orthogonal</title><link>http://blogs.msdn.com/aconrad/archive/2004/04/27/121256.aspx</link><pubDate>Tue, 27 Apr 2004 18:34:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:121256</guid><dc:creator>aconrad</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/aconrad/comments/121256.aspx</comments><wfw:commentRss>http://blogs.msdn.com/aconrad/commentrss.aspx?PostID=121256</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;I think Ralf post about &amp;#8220;&lt;A href="http://weblogs.asp.net/ralfw/archive/2004/02/04/67262.aspx"&gt;Should object persistence really be thought of as orthogonal functionality?&amp;#8221; &lt;/A&gt;is orthogonal to the real problem that ObjectSpaces is trying to solve.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It seems his overall point is that by allowing any domain objects to be persisted to a relational store will lead to some cases where the developer designs domain models which have poor performance for persisting to the store.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;In other words, he is hitting on the age old adage of to much abstraction and balck box magic can give the developer enough rope to hang themselves.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Sure, I won&amp;#8217;t argue that point, but I believe that is orthogonal to whether ObjectSpaces should be a prescriptive framework or not.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;ObjectSpaces is designed to work with POCO (plain old CLR objects) since it gives the developer of the domain model the most freedom.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This is designed to be a productivity gain and hopefully will supplant a large amount of the home-grown O/R mapping libraries that exist today.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;From that stand point, I am not sure I really understand how ObjectSpaces would introduce performance problems that don&amp;#8217;t already exist in an applications design.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;IMO, the potential for performance problems comes from the flexibility in the mapping.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;To persist an POCO object, ObjectSpaces roughly needs four things:&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;the current objects, the object state, the original values (including hidden values), and the types mapping information. Currently this information is contained in the ObjectManager, but it very well could be distributed to each domain object via an base class or a transparent proxy.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;To me, that is almost a question of style &amp;#8211; and each model has advantages/ disadvantages.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;In fact, I think the ultimate O/R framework would support all three models which would allow for the greatest flexibility.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;However, I believe that is orthogonal to whether the developer can use the framework to develop a poor performing design. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Think of an absurd case where the developer has hundred of types in my system each with a single property each mapping to a unique table my database.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This is not going to perform under any scenario since the queries being generated for any interesting scenario are going to be quite complex.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Whether or not the developer is using an O/R framework isn&amp;#8217;t going to make any difference &amp;#8211; independent of whether it is prescriptive or not.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;However, I don&amp;#8217;t want to be completely naive here.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Developers using ObjectSpaces will have to understand that their types are being persisted to a datastore.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This means making design decisions in their application roughly analogous to the type of design decisions distributed applications have to make, dealing with optimistic concurrency issues, thinking about transaction boundaries, etc &amp;#8230; all the same decisions the typical ADO.net developer has to think about today.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I&amp;#8217;m not saying it will be exactly the same and it will take some time to figure out what the new programming idioms are when working with ObjectSpaces, but it&amp;#8217;s going to be quite similar.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=121256" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/aconrad/archive/tags/ObjectSpaces/default.aspx">ObjectSpaces</category></item><item><title>O/R BOF talk</title><link>http://blogs.msdn.com/aconrad/archive/2004/04/26/120299.aspx</link><pubDate>Mon, 26 Apr 2004 16:09:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:120299</guid><dc:creator>aconrad</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/aconrad/comments/120299.aspx</comments><wfw:commentRss>http://blogs.msdn.com/aconrad/commentrss.aspx?PostID=120299</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;A href="http://www.bellware.net/"&gt;Scott Bellware&lt;/A&gt; has proposed a Object/ Relational &lt;A href="http://www.ineta.org/bof/Default.aspx"&gt;birds-of-a-feather&lt;/A&gt; talk for TechEd 2004.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;If you are interested, please make sure you vote for the topic.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Based on the strong showing for the same topic at PDC, this talk should be quite lively.&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=120299" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/aconrad/archive/tags/ObjectSpaces/default.aspx">ObjectSpaces</category><category domain="http://blogs.msdn.com/aconrad/archive/tags/TechEd+2004/default.aspx">TechEd 2004</category></item><item><title>Talk ideas and dinner?</title><link>http://blogs.msdn.com/aconrad/archive/2004/04/19/116091.aspx</link><pubDate>Mon, 19 Apr 2004 17:51:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:116091</guid><dc:creator>aconrad</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/aconrad/comments/116091.aspx</comments><wfw:commentRss>http://blogs.msdn.com/aconrad/commentrss.aspx?PostID=116091</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;I am giving a talk at TechEd 2004 which we have never given before called: &lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;B&gt;&lt;FONT face=Verdana color=black size=1&gt;&lt;SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"&gt;DAT380&amp;nbsp;&amp;nbsp;Building Applications with ADO.NET ObjectSpaces&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana color=black size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"&gt;Friday, May 28 9:00 AM- 10:15 AM&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana color=black size=1&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: black; FONT-FAMILY: Verdana"&gt;Speaker(s): &lt;SPAN title="" style="CURSOR: hand"&gt;Andrew Conrad&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana color=black size=1&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: black; FONT-FAMILY: Verdana"&gt;Track(s): Data Management, Developer Tools and Technologies&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana color=black size=1&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: black; FONT-FAMILY: Verdana"&gt;Traditionally, object oriented business objects and relational databases have differing ways of structuring data. As a result of this impedance mismatch, developers are forced to develop a layer of Object-to-Relational "plumbing" code between their business logic and the database access layers. To solve this common data access scenario, Microsoft is developing an Object-to-Relational data access framework called ADO.NET ObjectSpaces. Learn how ObjectSpaces allows the developer to query, modify or persist their CLR business objects without being concerned with the underlying structure of the relational data store. Building on session DAT301 (Object-relational mapping Using ADO.NET ObjectSpaces), this talk will concentrate on demonstrating how ObjectSpaces can be utilized to solve real challenges faced by enterprise application developers.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt; 
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;I general, I have some ideas about content for the talk, but am open to suggestions.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;My overall goal for the talk is to discuss the challenges facing the developer in enterprise scenarios, and talk about how one can use ObjectSpaces to solve those scenarios.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;More importantly, I want to give example of common design patterns I see developers having to utilize as the &amp;#8220;glue&amp;#8221; between ObjectSpaces and their Domain Models.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;In addition, let me know if there is any interest in setting up an ObjectSpaces user group dinner at TechEd.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=116091" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/aconrad/archive/tags/ObjectSpaces/default.aspx">ObjectSpaces</category><category domain="http://blogs.msdn.com/aconrad/archive/tags/TechEd+2004/default.aspx">TechEd 2004</category></item><item><title>Data Access Panel at TechEd 2004</title><link>http://blogs.msdn.com/aconrad/archive/2004/04/09/110572.aspx</link><pubDate>Fri, 09 Apr 2004 20:06:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:110572</guid><dc:creator>aconrad</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/aconrad/comments/110572.aspx</comments><wfw:commentRss>http://blogs.msdn.com/aconrad/commentrss.aspx?PostID=110572</wfw:commentRss><description>&lt;P class=MsoPlainText style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;I will be hosting a Data Access discussion panel at TechEd 2004:&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoPlainText style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Arial size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoPlainText style="MARGIN: 0in 0in 0pt"&gt;&lt;STRONG&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;DATPNL&amp;nbsp;&amp;nbsp;Data Access Round Table&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=MsoPlainText style="MARGIN: 0in 0in 0pt"&gt;&lt;STRONG&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;Thursday, May 27 11:45 AM- 12:30 PM&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=MsoPlainText style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Arial size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoPlainText style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;The following people will be participating in the panel discussion:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoPlainText style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Arial size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoPlainText style="MARGIN: 0in 0in 0pt"&gt;&lt;A href="http://weblogs.asp.net/mfussell"&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;EM&gt;Mark Fussell&lt;/EM&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&amp;#8211; Lead Program Manager for System.Xml and English soccer apologist&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoPlainText style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;EM&gt;Pablo Castro&lt;/EM&gt; -&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Program Manager for ADO.net and Argentinean soccer apologist&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoPlainText style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;EM&gt;Luca Bolognese&lt;/EM&gt; &amp;#8211; Program Manager for ObjectSpaces and Italian soccer apologist&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoPlainText style="MARGIN: 0in 0in 0pt"&gt;&lt;EM&gt;&lt;A href="http://blogs.msdn.com/arpande"&gt;&lt;FONT face=Arial size=2&gt;Arpan Desai&lt;/FONT&gt;&lt;/A&gt;&lt;/EM&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt; &amp;#8211; Program Manager for XQuery.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;(No World Cup soccer affiliation I believe).&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoPlainText style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Arial size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoPlainText style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;The goals of discussion are 1) to compare and contrast the current data access technologies and 2) to discuss overall vision and future direction.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;However, I would also like at least some (if not a majority) of the panel discussion to be customer driven so hence I am asking for topics and questions.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Please email me any and all suggestions.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=110572" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/aconrad/archive/tags/ObjectSpaces/default.aspx">ObjectSpaces</category><category domain="http://blogs.msdn.com/aconrad/archive/tags/XQuery/default.aspx">XQuery</category><category domain="http://blogs.msdn.com/aconrad/archive/tags/TechEd+2004/default.aspx">TechEd 2004</category></item><item><title>POCO</title><link>http://blogs.msdn.com/aconrad/archive/2004/03/02/82964.aspx</link><pubDate>Wed, 03 Mar 2004 00:14:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:82964</guid><dc:creator>aconrad</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/aconrad/comments/82964.aspx</comments><wfw:commentRss>http://blogs.msdn.com/aconrad/commentrss.aspx?PostID=82964</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=Arial color=#000000 size=2&gt;Encarta definition - a little or slightly  (used in musical directions)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#000000 size=2&gt;ObjectSpaces definition - Plain Old CLR Objects&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=82964" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/aconrad/archive/tags/ObjectSpaces/default.aspx">ObjectSpaces</category></item><item><title>Dino on ObjectSpaces</title><link>http://blogs.msdn.com/aconrad/archive/2004/02/24/79554.aspx</link><pubDate>Wed, 25 Feb 2004 01:43:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:79554</guid><dc:creator>aconrad</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/aconrad/comments/79554.aspx</comments><wfw:commentRss>http://blogs.msdn.com/aconrad/commentrss.aspx?PostID=79554</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=Arial size=2&gt;Dino Esposito has a nice introduction to ObjectSpaces on &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/netframework/default.aspx?pull=/library/en-us/dnadonet/html/objectspaces.asp"&gt;&lt;FONT face=Arial size=2&gt;MSDN&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial size=2&gt;.&amp;nbsp; Not particularly in depth, but is an excellent introduction to the API and mapping syntax.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=79554" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/aconrad/archive/tags/ObjectSpaces/default.aspx">ObjectSpaces</category></item><item><title>Bare Bones Sql versus OR (?)</title><link>http://blogs.msdn.com/aconrad/archive/2004/02/20/77193.aspx</link><pubDate>Fri, 20 Feb 2004 18:46:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:77193</guid><dc:creator>aconrad</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/aconrad/comments/77193.aspx</comments><wfw:commentRss>http://blogs.msdn.com/aconrad/commentrss.aspx?PostID=77193</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;I have to say I disagree with Ingo&amp;#8217;s comments about preferring &amp;#8220;&lt;A href="http://www.ingorammer.com/weblog/archives/001358.html"&gt;bare bones Sql&lt;/A&gt;&amp;#8221; over O/R mapping technology.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;IMO, the two topics are orthogonal.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Data Access is all about solving high level use cases.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;There are no rules out there that say one must give up the explicit, low level control just because an O/R mapping technology is utilized.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;In fact, I would suggest that a good O/R mapping technology needs to be easy to use AND extensible.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;That is it should solve all the common problems easily, but at the same time allow low level control as required.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Generation of sql statements is just one possible service an O/R mapping technology can provide.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Due to the wide range of transactional requirements and relational schemas currently existing, I believe that even a world class O/R mapping technology can only support 90% of the real world, Sql generation scenarios.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;In regard to the scenario Ingo suggests.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;ObjectSpaces will provide the ability for the user to provide their own custom sql statement (including stored procedures) to both select data from the database and to persist changes.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;ObjectSpaces also gives the user full control over the Sql connections, thereby allowing explicit control of the transaction semantics.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Sure, a majority of ObjectSpaces users will not need this sort of control, but it will be there for the ones who do.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I really don&amp;#8217;t see any reason why ObjectSpaces couldn&amp;#8217;t solve the Ingo&amp;#8217;s scenario.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=77193" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/aconrad/archive/tags/ObjectSpaces/default.aspx">ObjectSpaces</category></item><item><title>2004</title><link>http://blogs.msdn.com/aconrad/archive/2003/12/31/46954.aspx</link><pubDate>Wed, 31 Dec 2003 20:05:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:46954</guid><dc:creator>aconrad</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/aconrad/comments/46954.aspx</comments><wfw:commentRss>http://blogs.msdn.com/aconrad/commentrss.aspx?PostID=46954</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=Arial&gt;I started working on the outline for a book I am planning to write about ObjectSpaces.&amp;nbsp; My goal was to get it started before 2004, so there you go - well ahead of schedule.&amp;nbsp; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;Please don't tell &lt;/FONT&gt;&lt;A href="http://www.25hoursaday.com/weblog/"&gt;&lt;FONT face=Arial&gt;Dare&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial&gt; though, I am suppose to be finishing up a long over due &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/library/default.asp?url=/nhp/default.asp?contentid=28000438"&gt;&lt;FONT face=Arial&gt;ExtremeXml&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial&gt; column for him today.&amp;nbsp; In fact, it is part 2 of an &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/library/en-us/dnexxml/html/xml04212003.asp"&gt;&lt;FONT face=Arial&gt;article&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial&gt; I wrote eight months ago.&amp;nbsp; Oh well, unless distracted, I will probably finish it today&amp;nbsp;also.&amp;nbsp; My apologies to all the SqlXml'ers out there.&amp;nbsp; Originally I said the new column would be out a few months after TechEd 2003.&amp;nbsp; I guess my New Year's resolution for 2004 is to make my writing deadlines, and of course, as always&amp;nbsp;- to work out more.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;The articles are about using XmlSerialization and SqlXml 3.0 to turn Sql Server into an object repository.&amp;nbsp; Basically, it shows how to build a basic object to relational mapping framework&amp;nbsp;using existing, released&amp;nbsp;technologies.&amp;nbsp; In other words, a poor man's ObjectSpaces.&amp;nbsp; However, please note that the ObjectSpaces' persistence engine does not utilize XmlSerialization like my sample application does.&amp;nbsp;&amp;nbsp; In fact, the lexical reprsentation (XML) of the data being exchanged between the client objects and the data store it really unimportant.&amp;nbsp; What is being leveraged is the heirerarchical, semi-structured nature of the XML data model.&amp;nbsp; In other words, XML is an excellent way to representing an object graph and SqlXml is really good at translating the relational data to the XML data model - so by utilizing SqlXml and XmlSerilization, one can create a very interesting alternative data access mechanism for .net applications.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;It is no secret that going forward that the SqlXml and ObjectSpaces teams at Microsoft&amp;nbsp;are sharing the core query/ persistance/ persistencemapping code base.&amp;nbsp; In fact, in Whidbey the new three part mapping will only differ only on&amp;nbsp;the &amp;#8220;left hand side&amp;#8221;.&amp;nbsp;&amp;nbsp; I prefer to say (with a bit of hand waving)&amp;nbsp;that the only difference between the two technologies is angle brackets... but that is probably a bit of an exaggeration.&amp;nbsp; I would however suggest that the two technologies are a lot more similar then not.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=46954" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/aconrad/archive/tags/ObjectSpaces/default.aspx">ObjectSpaces</category></item></channel></rss>