<?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: Making history explicit</title>
	<atom:link href="http://lostechies.com/gabrielschenker/2010/09/15/making-history-explicit/feed/" rel="self" type="application/rss+xml" />
	<link>http://lostechies.com/gabrielschenker/2010/09/15/making-history-explicit/</link>
	<description>Blog about architectural patterns, best practices, coding principles and techniques</description>
	<lastBuildDate>Wed, 22 May 2013 12:15:00 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
	<item>
		<title>By: Scott Bellware</title>
		<link>http://lostechies.com/gabrielschenker/2010/09/15/making-history-explicit/#comment-253</link>
		<dc:creator>Scott Bellware</dc:creator>
		<pubDate>Fri, 17 Sep 2010 17:21:34 +0000</pubDate>
		<guid isPermaLink="false">/blogs/gabrielschenker/archive/2010/09/15/making-history-explicit.aspx#comment-253</guid>
		<description>Just musing to myself that if you guys had gone with a compositional language, that this problem would have been much easier to solve. Just wondering why we constrain ourselves to tools that often have stark limits and then struggle to do things with them that point to tools without these limits.

In a compositional language, so much more is available as standard work. That because more generalized solutions are possible. That&#039;s because there&#039;s no tripping on inheritance of templated types, which are difficult to share effectively across an entire ecosystem.

Here&#039;s how much work this would be in a compositional language, for example, in Ruby:

class Cage &lt;&lt; ActiveRecord::Base
  versioned
end

(see: http://github.com/laserlemon/vestal_versions/blob/master/README.rdoc)

Because compositional languages allow many avenues to generalization, these problems get solved early and are made available as ecosystem standard work, eg: http://ruby-toolbox.com/categories/activerecord_versioning.html

What is it that is compelling about the platform you&#039;re using that would see to the re-creation and re-learning of things that are essentially standard work that has been commoditized as plugins and microframeworks?

Is Silverlight really so unique in its capabilities that it is uniquely able to address the line of business user interface issues for your app? It seems like a hell of a lot to trade off to eschew the incredible amount of off-the-shelf components in compositional language ecosystems.

The cost of rework of so much standardized work would have to be offset by some incredible productivity and competitive advantages. Based on what we see regularly in terms of capabilities of contemporary web apps, what is it that you guys are doing with Silverlight - that justifies so much re-invention - that can&#039;t be done with contemporary web development?
</description>
		<content:encoded><![CDATA[<p>Just musing to myself that if you guys had gone with a compositional language, that this problem would have been much easier to solve. Just wondering why we constrain ourselves to tools that often have stark limits and then struggle to do things with them that point to tools without these limits.</p>
<p>In a compositional language, so much more is available as standard work. That because more generalized solutions are possible. That&#8217;s because there&#8217;s no tripping on inheritance of templated types, which are difficult to share effectively across an entire ecosystem.</p>
<p>Here&#8217;s how much work this would be in a compositional language, for example, in Ruby:</p>
<p>class Cage < < ActiveRecord::Base<br />
  versioned<br />
end</p>
<p>(see: <a href="http://github.com/laserlemon/vestal_versions/blob/master/README.rdoc" rel="nofollow">http://github.com/laserlemon/vestal_versions/blob/master/README.rdoc)</p>
<p>Because compositional languages allow many avenues to generalization, these problems get solved early and are made available as ecosystem standard work, eg: <a href="http://ruby-toolbox.com/categories/activerecord_versioning.html" rel="nofollow">http://ruby-toolbox.com/categories/activerecord_versioning.html</a></p>
<p>What is it that is compelling about the platform you&#8217;re using that would see to the re-creation and re-learning of things that are essentially standard work that has been commoditized as plugins and microframeworks?</p>
<p>Is Silverlight really so unique in its capabilities that it is uniquely able to address the line of business user interface issues for your app? It seems like a hell of a lot to trade off to eschew the incredible amount of off-the-shelf components in compositional language ecosystems.</p>
<p>The cost of rework of so much standardized work would have to be offset by some incredible productivity and competitive advantages. Based on what we see regularly in terms of capabilities of contemporary web apps, what is it that you guys are doing with Silverlight &#8211; that justifies so much re-invention &#8211; that can&#8217;t be done with contemporary web development?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Josh</title>
		<link>http://lostechies.com/gabrielschenker/2010/09/15/making-history-explicit/#comment-252</link>
		<dc:creator>Josh</dc:creator>
		<pubDate>Wed, 15 Sep 2010 22:26:40 +0000</pubDate>
		<guid isPermaLink="false">/blogs/gabrielschenker/archive/2010/09/15/making-history-explicit.aspx#comment-252</guid>
		<description>Event sourcing is good, but I hate how everyone jumps to it immediately as &quot;the&quot; only temporal solution.</description>
		<content:encoded><![CDATA[<p>Event sourcing is good, but I hate how everyone jumps to it immediately as &#8220;the&#8221; only temporal solution.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Gabriel N. Schenker</title>
		<link>http://lostechies.com/gabrielschenker/2010/09/15/making-history-explicit/#comment-251</link>
		<dc:creator>Gabriel N. Schenker</dc:creator>
		<pubDate>Wed, 15 Sep 2010 19:45:12 +0000</pubDate>
		<guid isPermaLink="false">/blogs/gabrielschenker/archive/2010/09/15/making-history-explicit.aspx#comment-251</guid>
		<description>@Josh: we did consider using inheritance but then preferred not to use it. There have been various reasons to do so, one of them being not to have to deal with deep hierarchies which tend to be brittle.
@Josh and Carl: Whenever the schema changes we have to change not only the entity but also the UI amongst other things. Such a change usually affects all layers of an application.
Why didn&#039;t we go with event sourcing? Well our solution is very large and has a long history. We have to consider a lot of &quot;legacy stuff&quot;. It is the typical slow migration to a &quot;better&quot; architectur...</description>
		<content:encoded><![CDATA[<p>@Josh: we did consider using inheritance but then preferred not to use it. There have been various reasons to do so, one of them being not to have to deal with deep hierarchies which tend to be brittle.<br />
@Josh and Carl: Whenever the schema changes we have to change not only the entity but also the UI amongst other things. Such a change usually affects all layers of an application.<br />
Why didn&#8217;t we go with event sourcing? Well our solution is very large and has a long history. We have to consider a lot of &#8220;legacy stuff&#8221;. It is the typical slow migration to a &#8220;better&#8221; architectur&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Carl H&#246;rberg</title>
		<link>http://lostechies.com/gabrielschenker/2010/09/15/making-history-explicit/#comment-250</link>
		<dc:creator>Carl H&#246;rberg</dc:creator>
		<pubDate>Wed, 15 Sep 2010 18:59:59 +0000</pubDate>
		<guid isPermaLink="false">/blogs/gabrielschenker/archive/2010/09/15/making-history-explicit.aspx#comment-250</guid>
		<description>Why didnt you go with event sourcing?

How will you handle schema changes?  </description>
		<content:encoded><![CDATA[<p>Why didnt you go with event sourcing?</p>
<p>How will you handle schema changes?  </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Josh</title>
		<link>http://lostechies.com/gabrielschenker/2010/09/15/making-history-explicit/#comment-249</link>
		<dc:creator>Josh</dc:creator>
		<pubDate>Wed, 15 Sep 2010 15:32:34 +0000</pubDate>
		<guid isPermaLink="false">/blogs/gabrielschenker/archive/2010/09/15/making-history-explicit.aspx#comment-249</guid>
		<description>Did you ever explore using inheritence for your history object (CageHistory : Cage) so you don&#039;t have to worry about forgetting to maintain new properties that are essentially the same, on two different classes?</description>
		<content:encoded><![CDATA[<p>Did you ever explore using inheritence for your history object (CageHistory : Cage) so you don&#8217;t have to worry about forgetting to maintain new properties that are essentially the same, on two different classes?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Gabriel N. Schenker</title>
		<link>http://lostechies.com/gabrielschenker/2010/09/15/making-history-explicit/#comment-248</link>
		<dc:creator>Gabriel N. Schenker</dc:creator>
		<pubDate>Wed, 15 Sep 2010 11:56:22 +0000</pubDate>
		<guid isPermaLink="false">/blogs/gabrielschenker/archive/2010/09/15/making-history-explicit.aspx#comment-248</guid>
		<description>@J Healy, @Jonathan: we are actually using CQRS in our solution. But you guys are probably talking of event sourcing, isn&#039;t it?
@Jonathan: you can never avoid that a &quot;malicious&quot; DBA manually alters your data but you can at least try to make it as unlikely as possible by declaring in the contract/license that manually changing data is not allowed and violates the contract.</description>
		<content:encoded><![CDATA[<p>@J Healy, @Jonathan: we are actually using CQRS in our solution. But you guys are probably talking of event sourcing, isn&#8217;t it?<br />
@Jonathan: you can never avoid that a &#8220;malicious&#8221; DBA manually alters your data but you can at least try to make it as unlikely as possible by declaring in the contract/license that manually changing data is not allowed and violates the contract.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jonathan Oliver</title>
		<link>http://lostechies.com/gabrielschenker/2010/09/15/making-history-explicit/#comment-247</link>
		<dc:creator>Jonathan Oliver</dc:creator>
		<pubDate>Wed, 15 Sep 2010 11:23:37 +0000</pubDate>
		<guid isPermaLink="false">/blogs/gabrielschenker/archive/2010/09/15/making-history-explicit.aspx#comment-247</guid>
		<description>+1 for CQRS--tracking history and state changes is where it really shines.

Also, how can you 100% guarantee that your audit trail is correct?  What happens if someone goes in an edits the table manually (to fix some data that was incorrectly computed because of a bug)?</description>
		<content:encoded><![CDATA[<p>+1 for CQRS&#8211;tracking history and state changes is where it really shines.</p>
<p>Also, how can you 100% guarantee that your audit trail is correct?  What happens if someone goes in an edits the table manually (to fix some data that was incorrectly computed because of a bug)?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: J Healy</title>
		<link>http://lostechies.com/gabrielschenker/2010/09/15/making-history-explicit/#comment-246</link>
		<dc:creator>J Healy</dc:creator>
		<pubDate>Wed, 15 Sep 2010 07:28:19 +0000</pubDate>
		<guid isPermaLink="false">/blogs/gabrielschenker/archive/2010/09/15/making-history-explicit.aspx#comment-246</guid>
		<description>Looks like a reasonable approach, but  my response to such history requirements these days would likely have me leaning more towards a CQRS solution.</description>
		<content:encoded><![CDATA[<p>Looks like a reasonable approach, but  my response to such history requirements these days would likely have me leaning more towards a CQRS solution.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: JeroenH</title>
		<link>http://lostechies.com/gabrielschenker/2010/09/15/making-history-explicit/#comment-245</link>
		<dc:creator>JeroenH</dc:creator>
		<pubDate>Wed, 15 Sep 2010 06:06:10 +0000</pubDate>
		<guid isPermaLink="false">/blogs/gabrielschenker/archive/2010/09/15/making-history-explicit.aspx#comment-245</guid>
		<description>I&#039;ve done something very similar in the project I&#039;m currently working on.

This seemed like a good idea, but I&#039;m not sure I would model it again like this. In the future, I would probably opt for a simple model for the current situation, and a daily export to a separate table (probably even separate) database. Of course, if you really need the most granular history, this wouldn&#039;t work but in most circumstances it should suffice...</description>
		<content:encoded><![CDATA[<p>I&#8217;ve done something very similar in the project I&#8217;m currently working on.</p>
<p>This seemed like a good idea, but I&#8217;m not sure I would model it again like this. In the future, I would probably opt for a simple model for the current situation, and a daily export to a separate table (probably even separate) database. Of course, if you really need the most granular history, this wouldn&#8217;t work but in most circumstances it should suffice&#8230;</p>
]]></content:encoded>
	</item>
</channel>
</rss>
